@absolutejs/auth 0.45.4 → 0.45.5

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.
@@ -9,8 +9,8 @@
9
9
  "// NextAuth.js / Auth.js importer.\n//\n// NextAuth.js stores users in `users` and OAuth links in `accounts`\n// (Drizzle / Prisma adapter naming). MongoDB and SQL Server adapters\n// follow the same conceptual shape with different table naming.\n// Concatenate the two tables as a single JSON document:\n//\n// {\n// \"users\": [\n// { \"id\": \"...\", \"email\": \"alice@x\", \"emailVerified\": \"2024-01-01...\",\n// \"name\": \"Alice Smith\", \"image\": \"...\" },\n// …\n// ],\n// \"accounts\": [\n// { \"userId\": \"...\", \"provider\": \"google\", \"providerAccountId\": \"118392...\",\n// \"type\": \"oauth\" }\n// ]\n// }\n//\n// NextAuth doesn't ship a Credentials password store by default — its\n// official guidance is to discourage passwords. If your app added a\n// custom credentials provider, you'll have the hashes in your own\n// custom column; pass them via the optional `passwordsByUserId` field:\n//\n// { \"users\": […], \"accounts\": […],\n// \"passwordsByUserId\": { \"user_id_1\": \"$argon2id$…\" } }\n\nimport { readFile } from 'node:fs/promises';\nimport type { ImportResult, Importer } from './types';\n\ntype NextAuthUser = {\n\temail: string;\n\temailVerified?: string | null;\n\tid: string;\n\timage?: string;\n\tname?: string;\n};\n\ntype NextAuthAccount = {\n\tprovider: string;\n\tproviderAccountId: string;\n\ttype?: string;\n\tuserId: string;\n};\n\ntype NextAuthExport = {\n\taccounts?: NextAuthAccount[];\n\tpasswordsByUserId?: Record<string, string | undefined>;\n\tusers: NextAuthUser[];\n};\n\nconst splitName = (full: string | undefined) => {\n\tif (full === undefined)\n\t\treturn { familyName: undefined, givenName: undefined };\n\tconst parts = full.split(/\\s+/);\n\tif (parts.length === 1)\n\t\treturn { familyName: undefined, givenName: parts[0] };\n\n\treturn {\n\t\tfamilyName: parts.slice(1).join(' '),\n\t\tgivenName: parts[0]\n\t};\n};\n\nexport const nextauthImporter: Importer = {\n\tsource: 'nextauth',\n\tparse: async (path: string): Promise<ImportResult> => {\n\t\tconst text = await readFile(path, 'utf-8');\n\t\tconst parsed: NextAuthExport = JSON.parse(text);\n\n\t\tconst users = parsed.users.map((raw) => {\n\t\t\tconst split = splitName(raw.name);\n\t\t\tconst passwordHash = parsed.passwordsByUserId?.[raw.id];\n\n\t\t\treturn {\n\t\t\t\tcreatedAtMs: Date.now(),\n\t\t\t\temail: raw.email,\n\t\t\t\temailVerified:\n\t\t\t\t\traw.emailVerified !== null &&\n\t\t\t\t\traw.emailVerified !== undefined,\n\t\t\t\texternalId: raw.id,\n\t\t\t\tfamilyName: split.familyName,\n\t\t\t\tgivenName: split.givenName,\n\t\t\t\tpasswordHash,\n\t\t\t\tpasswordHashAlgo: passwordHash?.startsWith('$argon2id')\n\t\t\t\t\t? ('argon2id' as const)\n\t\t\t\t\t: passwordHash?.startsWith('$2')\n\t\t\t\t\t\t? ('bcrypt' as const)\n\t\t\t\t\t\t: undefined\n\t\t\t};\n\t\t});\n\n\t\tconst identities = (parsed.accounts ?? [])\n\t\t\t.filter(\n\t\t\t\t(account) =>\n\t\t\t\t\taccount.type === undefined || account.type === 'oauth'\n\t\t\t)\n\t\t\t.map((account) => ({\n\t\t\t\tauthProvider: account.provider,\n\t\t\t\tcreatedAtMs: Date.now(),\n\t\t\t\tproviderSubject: account.providerAccountId,\n\t\t\t\tuserExternalId: account.userId\n\t\t\t}));\n\n\t\treturn { identities, source: 'nextauth', users };\n\t}\n};\n",
10
10
  "// Supabase Auth importer.\n//\n// Supabase stores auth state in the `auth.users` + `auth.identities`\n// tables of your Postgres. Easiest path: dump the two tables to JSON\n// via `psql -c \"COPY (SELECT row_to_json(t) FROM auth.users t) TO ...\"`,\n// then concatenate the two files into one JSON document:\n//\n// {\n// \"users\": [\n// { \"id\": \"...\", \"email\": \"alice@x\", \"encrypted_password\": \"$2a$10$...\",\n// \"email_confirmed_at\": \"2024-01-01T...\", \"created_at\": \"...\",\n// \"raw_user_meta_data\": { \"full_name\": \"Alice Smith\" } },\n// …\n// ],\n// \"identities\": [\n// { \"user_id\": \"...\", \"provider\": \"google\", \"provider_id\": \"118392...\",\n// \"identity_data\": {...}, \"created_at\": \"...\" }\n// ]\n// }\n//\n// Supabase uses bcrypt for the `encrypted_password` column; verbatim copy\n// works (and our credentials block sniffs the $2 prefix at next login).\n\nimport { readFile } from 'node:fs/promises';\nimport type { ImportResult, Importer } from './types';\n\ntype SupabaseUser = {\n\tcreated_at?: string;\n\temail: string;\n\temail_confirmed_at?: string;\n\tencrypted_password?: string;\n\tid: string;\n\traw_user_meta_data?: {\n\t\tfamily_name?: string;\n\t\tfull_name?: string;\n\t\tgiven_name?: string;\n\t};\n};\n\ntype SupabaseIdentity = {\n\tcreated_at?: string;\n\tprovider: string;\n\tprovider_id: string;\n\tuser_id: string;\n};\n\ntype SupabaseExport = {\n\tidentities?: SupabaseIdentity[];\n\tusers: SupabaseUser[];\n};\n\nconst splitFullName = (full: string | undefined) => {\n\tif (full === undefined)\n\t\treturn { familyName: undefined, givenName: undefined };\n\tconst parts = full.split(/\\s+/);\n\tif (parts.length === 1)\n\t\treturn { familyName: undefined, givenName: parts[0] };\n\n\treturn {\n\t\tfamilyName: parts.slice(1).join(' '),\n\t\tgivenName: parts[0]\n\t};\n};\n\nexport const supabaseImporter: Importer = {\n\tsource: 'supabase',\n\tparse: async (path: string): Promise<ImportResult> => {\n\t\tconst text = await readFile(path, 'utf-8');\n\t\tconst parsed: SupabaseExport = JSON.parse(text);\n\n\t\tconst users = parsed.users.map((raw) => {\n\t\t\tconst meta = raw.raw_user_meta_data ?? {};\n\t\t\tconst split = splitFullName(meta.full_name);\n\n\t\t\treturn {\n\t\t\t\tcreatedAtMs:\n\t\t\t\t\traw.created_at === undefined\n\t\t\t\t\t\t? Date.now()\n\t\t\t\t\t\t: Date.parse(raw.created_at),\n\t\t\t\temail: raw.email,\n\t\t\t\temailVerified: raw.email_confirmed_at !== undefined,\n\t\t\t\texternalId: raw.id,\n\t\t\t\tfamilyName: meta.family_name ?? split.familyName,\n\t\t\t\tgivenName: meta.given_name ?? split.givenName,\n\t\t\t\tpasswordHash: raw.encrypted_password,\n\t\t\t\tpasswordHashAlgo: raw.encrypted_password?.startsWith('$2')\n\t\t\t\t\t? ('bcrypt' as const)\n\t\t\t\t\t: undefined\n\t\t\t};\n\t\t});\n\n\t\tconst identities = (parsed.identities ?? []).map((identity) => ({\n\t\t\tauthProvider: identity.provider,\n\t\t\tcreatedAtMs:\n\t\t\t\tidentity.created_at === undefined\n\t\t\t\t\t? Date.now()\n\t\t\t\t\t: Date.parse(identity.created_at),\n\t\t\tproviderSubject: identity.provider_id,\n\t\t\tuserExternalId: identity.user_id\n\t\t}));\n\n\t\treturn { identities, source: 'supabase', users };\n\t}\n};\n",
11
11
  "import { and, desc, eq } from 'drizzle-orm';\nimport {\n\tbigint,\n\tboolean,\n\tdoublePrecision,\n\tpgTable,\n\tprimaryKey,\n\tvarchar\n} from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type {\n\tKnownDevice,\n\tKnownDeviceStore,\n\tLoginAttempt,\n\tLoginHistoryStore\n} from './types';\n\nconst ID_LENGTH = 255;\n\nexport const knownDevicesTable = pgTable(\n\t'auth_known_devices',\n\t{\n\t\tdevice_id: varchar('device_id', { length: ID_LENGTH }).notNull(),\n\t\tfirst_seen_at_ms: bigint('first_seen_at_ms', {\n\t\t\tmode: 'number'\n\t\t}).notNull(),\n\t\tlabel: varchar('label', { length: ID_LENGTH }),\n\t\tlast_seen_at_ms: bigint('last_seen_at_ms', {\n\t\t\tmode: 'number'\n\t\t}).notNull(),\n\t\ttrusted: boolean('trusted').notNull().default(false),\n\t\tuser_id: varchar('user_id', { length: ID_LENGTH }).notNull()\n\t},\n\t(table) => [primaryKey({ columns: [table.user_id, table.device_id] })]\n);\n\nexport const loginHistoryTable = pgTable('auth_login_history', {\n\tattempt_id: varchar('attempt_id', { length: ID_LENGTH }).primaryKey(),\n\tcountry: varchar('country', { length: ID_LENGTH }),\n\tdevice_id: varchar('device_id', { length: ID_LENGTH }).notNull(),\n\tip_address: varchar('ip_address', { length: ID_LENGTH }),\n\tlatitude: doublePrecision('latitude'),\n\tlongitude: doublePrecision('longitude'),\n\toutcome: varchar('outcome', { length: ID_LENGTH }).notNull(),\n\ttimestamp_ms: bigint('timestamp_ms', { mode: 'number' }).notNull(),\n\tuser_id: varchar('user_id', { length: ID_LENGTH }).notNull()\n});\n\ntype KnownDeviceRow = typeof knownDevicesTable.$inferSelect;\ntype LoginAttemptRow = typeof loginHistoryTable.$inferSelect;\n\nconst toRiskAction = (value: string) => {\n\tif (value === 'deny') return 'deny';\n\tif (value === 'step_up') return 'step_up';\n\n\treturn 'allow';\n};\n\nconst toDevice = (row: KnownDeviceRow): KnownDevice => ({\n\tdeviceId: row.device_id,\n\tfirstSeenAt: row.first_seen_at_ms,\n\tlabel: row.label ?? undefined,\n\tlastSeenAt: row.last_seen_at_ms,\n\ttrusted: row.trusted,\n\tuserId: row.user_id\n});\n\nconst toDeviceValues = (\n\tdevice: KnownDevice\n): typeof knownDevicesTable.$inferInsert => ({\n\tdevice_id: device.deviceId,\n\tfirst_seen_at_ms: device.firstSeenAt,\n\tlabel: device.label ?? null,\n\tlast_seen_at_ms: device.lastSeenAt,\n\ttrusted: device.trusted,\n\tuser_id: device.userId\n});\n\nconst toAttempt = (row: LoginAttemptRow): LoginAttempt => ({\n\tattemptId: row.attempt_id,\n\tcountry: row.country ?? undefined,\n\tdeviceId: row.device_id,\n\tipAddress: row.ip_address ?? undefined,\n\tlatitude: row.latitude ?? undefined,\n\tlongitude: row.longitude ?? undefined,\n\toutcome: toRiskAction(row.outcome),\n\ttimestamp: row.timestamp_ms,\n\tuserId: row.user_id\n});\n\nconst toAttemptValues = (\n\tattempt: LoginAttempt\n): typeof loginHistoryTable.$inferInsert => ({\n\tattempt_id: attempt.attemptId,\n\tcountry: attempt.country ?? null,\n\tdevice_id: attempt.deviceId,\n\tip_address: attempt.ipAddress ?? null,\n\tlatitude: attempt.latitude ?? null,\n\tlongitude: attempt.longitude ?? null,\n\toutcome: attempt.outcome,\n\ttimestamp_ms: attempt.timestamp,\n\tuser_id: attempt.userId\n});\n\nexport const createNeonKnownDeviceStore = (databaseUrl: string) =>\n\tcreatePostgresKnownDeviceStore(createNeonDatabase(databaseUrl));\nexport const createNeonLoginHistoryStore = (databaseUrl: string) =>\n\tcreatePostgresLoginHistoryStore(createNeonDatabase(databaseUrl));\nexport const createPostgresKnownDeviceStore = (\n\tdb: AnyPgDatabase\n): KnownDeviceStore => ({\n\tfindDevice: async (userId, deviceId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(knownDevicesTable)\n\t\t\t.where(\n\t\t\t\tand(\n\t\t\t\t\teq(knownDevicesTable.user_id, userId),\n\t\t\t\t\teq(knownDevicesTable.device_id, deviceId)\n\t\t\t\t)\n\t\t\t)\n\t\t\t.limit(1);\n\n\t\treturn row ? toDevice(row) : undefined;\n\t},\n\tlistDevices: async (userId) => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(knownDevicesTable)\n\t\t\t.where(eq(knownDevicesTable.user_id, userId))\n\t\t\t.orderBy(desc(knownDevicesTable.last_seen_at_ms));\n\n\t\treturn rows.map(toDevice);\n\t},\n\tsaveDevice: async (device) => {\n\t\tconst values = toDeviceValues(device);\n\t\tawait db\n\t\t\t.insert(knownDevicesTable)\n\t\t\t.values(values)\n\t\t\t.onConflictDoUpdate({\n\t\t\t\tset: values,\n\t\t\t\ttarget: [knownDevicesTable.user_id, knownDevicesTable.device_id]\n\t\t\t});\n\t}\n});\nexport const createPostgresLoginHistoryStore = (\n\tdb: AnyPgDatabase\n): LoginHistoryStore => ({\n\tlistRecent: async (userId, limit) => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(loginHistoryTable)\n\t\t\t.where(eq(loginHistoryTable.user_id, userId))\n\t\t\t.orderBy(desc(loginHistoryTable.timestamp_ms))\n\t\t\t.limit(limit);\n\n\t\treturn rows.map(toAttempt);\n\t},\n\trecordAttempt: async (attempt) => {\n\t\tawait db.insert(loginHistoryTable).values(toAttemptValues(attempt));\n\t}\n});\n",
12
- "import type {\n\tExtractTablesWithRelations,\n\tTablesRelationalConfig\n} from 'drizzle-orm';\nimport { neon } from '@neondatabase/serverless';\nimport { drizzle } from 'drizzle-orm/neon-http';\nimport type { PgDatabase, PgQueryResultHKT } from 'drizzle-orm/pg-core';\n\n// Shared scaffolding for the enterprise stores. Every new store ships an\n// in-memory implementation (dev/test) plus a Postgres implementation that accepts\n// a Drizzle `PgDatabase` — so it runs on Neon (neon-http) AND node-postgres without\n// the package bundling a second driver. `createNeonDatabase` is the convenience\n// wrapper consumers reach for when they just want a Neon connection string.\n\n// Generic over all three `PgDatabase` type parameters (query-result HKT, full\n// schema, relational schema). PgDatabase is effectively invariant over these,\n// so pinning concrete ones (the old `PgDatabase<PgQueryResultHKT>`) rejected\n// postgres-js / node-postgres instances and forced consumers to cast. By\n// threading them as type parameters on each store constructor, TS *infers* the\n// caller's exact db type (unification, not a supertype check) — so every\n// driver binds with no `any`, no caller-side casts, and fully-typed store\n// bodies.\nexport type AnyPgDatabase<\n\tQ extends PgQueryResultHKT = PgQueryResultHKT,\n\tTFullSchema extends Record<string, unknown> = Record<string, never>,\n\tTSchema extends\n\t\tTablesRelationalConfig = ExtractTablesWithRelations<TFullSchema>\n> = PgDatabase<Q, TFullSchema, TSchema>;\n\n// Re-exported so each store can bound its constructor generics from one import.\nexport type { PgQueryResultHKT } from 'drizzle-orm/pg-core';\nexport type { TablesRelationalConfig } from 'drizzle-orm';\n\nexport const createNeonDatabase = (databaseUrl: string) =>\n\tdrizzle(neon(databaseUrl));\n",
13
- "import { desc, eq, lt } from 'drizzle-orm';\nimport { bigint, pgTable, text, varchar } from 'drizzle-orm/pg-core';\nimport {\n\ttype AnyPgDatabase,\n\ttype PgQueryResultHKT,\n\ttype TablesRelationalConfig,\n\tcreateNeonDatabase\n} from '../stores/postgres';\nimport type {\n\tAccessToken,\n\tAccessTokenStore,\n\tApiClient,\n\tApiClientStore,\n\tApiKey,\n\tApiKeyStore\n} from './types';\n\nconst ID_LENGTH = 255;\n\nexport const accessTokensTable = pgTable('auth_access_tokens', {\n\tclient_id: varchar('client_id', { length: ID_LENGTH }).notNull(),\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\thashed_token: varchar('hashed_token', { length: ID_LENGTH }).notNull(),\n\towner_id: varchar('owner_id', { length: ID_LENGTH }),\n\tscopes: text('scopes').array().notNull(),\n\ttoken_id: varchar('token_id', { length: ID_LENGTH }).primaryKey()\n});\nexport const apiClientsTable = pgTable('auth_api_clients', {\n\tclient_id: varchar('client_id', { length: ID_LENGTH }).primaryKey(),\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\thashed_secret: varchar('hashed_secret', { length: ID_LENGTH }).notNull(),\n\tname: varchar('name', { length: ID_LENGTH }).notNull(),\n\towner_id: varchar('owner_id', { length: ID_LENGTH }),\n\tscopes: text('scopes').array().notNull()\n});\nexport const apiKeysTable = pgTable('auth_api_keys', {\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }),\n\thashed_key: varchar('hashed_key', { length: ID_LENGTH }).notNull(),\n\tkey_id: varchar('key_id', { length: ID_LENGTH }).primaryKey(),\n\tlast_used_at_ms: bigint('last_used_at_ms', { mode: 'number' }),\n\tname: varchar('name', { length: ID_LENGTH }).notNull(),\n\towner_id: varchar('owner_id', { length: ID_LENGTH }),\n\tprefix: varchar('prefix', { length: ID_LENGTH }).notNull(),\n\tscopes: text('scopes').array().notNull()\n});\n\ntype ApiKeyRow = typeof apiKeysTable.$inferSelect;\ntype ApiClientRow = typeof apiClientsTable.$inferSelect;\ntype AccessTokenRow = typeof accessTokensTable.$inferSelect;\n\nconst toKey = (row: ApiKeyRow): ApiKey => ({\n\tcreatedAt: row.created_at_ms,\n\texpiresAt: row.expires_at_ms ?? undefined,\n\thashedKey: row.hashed_key,\n\tkeyId: row.key_id,\n\tlastUsedAt: row.last_used_at_ms ?? undefined,\n\tname: row.name,\n\townerId: row.owner_id ?? undefined,\n\tprefix: row.prefix,\n\tscopes: row.scopes\n});\n\nconst toKeyValues = (key: ApiKey): typeof apiKeysTable.$inferInsert => ({\n\tcreated_at_ms: key.createdAt,\n\texpires_at_ms: key.expiresAt ?? null,\n\thashed_key: key.hashedKey,\n\tkey_id: key.keyId,\n\tlast_used_at_ms: key.lastUsedAt ?? null,\n\tname: key.name,\n\towner_id: key.ownerId ?? null,\n\tprefix: key.prefix,\n\tscopes: key.scopes\n});\n\nconst toClient = (row: ApiClientRow): ApiClient => ({\n\tclientId: row.client_id,\n\tcreatedAt: row.created_at_ms,\n\thashedSecret: row.hashed_secret,\n\tname: row.name,\n\townerId: row.owner_id ?? undefined,\n\tscopes: row.scopes\n});\n\nconst toClientValues = (\n\tclient: ApiClient\n): typeof apiClientsTable.$inferInsert => ({\n\tclient_id: client.clientId,\n\tcreated_at_ms: client.createdAt,\n\thashed_secret: client.hashedSecret,\n\tname: client.name,\n\towner_id: client.ownerId ?? null,\n\tscopes: client.scopes\n});\n\nconst toAccessToken = (row: AccessTokenRow): AccessToken => ({\n\tclientId: row.client_id,\n\tcreatedAt: row.created_at_ms,\n\texpiresAt: row.expires_at_ms,\n\thashedToken: row.hashed_token,\n\townerId: row.owner_id ?? undefined,\n\tscopes: row.scopes,\n\ttokenId: row.token_id\n});\n\nconst toAccessTokenValues = (\n\ttoken: AccessToken\n): typeof accessTokensTable.$inferInsert => ({\n\tclient_id: token.clientId,\n\tcreated_at_ms: token.createdAt,\n\texpires_at_ms: token.expiresAt,\n\thashed_token: token.hashedToken,\n\towner_id: token.ownerId ?? null,\n\tscopes: token.scopes,\n\ttoken_id: token.tokenId\n});\n\nexport const createNeonAccessTokenStore = (databaseUrl: string) =>\n\tcreatePostgresAccessTokenStore(createNeonDatabase(databaseUrl));\nexport const createNeonApiClientStore = (databaseUrl: string) =>\n\tcreatePostgresApiClientStore(createNeonDatabase(databaseUrl));\nexport const createNeonApiKeyStore = (databaseUrl: string) =>\n\tcreatePostgresApiKeyStore(createNeonDatabase(databaseUrl));\nexport const createPostgresAccessTokenStore = <\n\tQ extends PgQueryResultHKT,\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig\n>(\n\tdb: AnyPgDatabase<Q, TFullSchema, TSchema>\n): AccessTokenStore => ({\n\tdeleteExpired: async (now) => {\n\t\tawait db\n\t\t\t.delete(accessTokensTable)\n\t\t\t.where(lt(accessTokensTable.expires_at_ms, now));\n\t},\n\tdeleteToken: async (tokenId) => {\n\t\tawait db\n\t\t\t.delete(accessTokensTable)\n\t\t\t.where(eq(accessTokensTable.token_id, tokenId));\n\t},\n\tfindByHashedToken: async (hashedToken) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(accessTokensTable)\n\t\t\t.where(eq(accessTokensTable.hashed_token, hashedToken))\n\t\t\t.limit(1);\n\n\t\treturn row ? toAccessToken(row) : undefined;\n\t},\n\tsaveToken: async (token) => {\n\t\tconst values = toAccessTokenValues(token);\n\t\tawait db.insert(accessTokensTable).values(values).onConflictDoUpdate({\n\t\t\tset: values,\n\t\t\ttarget: accessTokensTable.token_id\n\t\t});\n\t}\n});\nexport const createPostgresApiClientStore = <\n\tQ extends PgQueryResultHKT,\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig\n>(\n\tdb: AnyPgDatabase<Q, TFullSchema, TSchema>\n): ApiClientStore => ({\n\tdeleteClient: async (clientId) => {\n\t\tawait db\n\t\t\t.delete(apiClientsTable)\n\t\t\t.where(eq(apiClientsTable.client_id, clientId));\n\t},\n\tfindClient: async (clientId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(apiClientsTable)\n\t\t\t.where(eq(apiClientsTable.client_id, clientId))\n\t\t\t.limit(1);\n\n\t\treturn row ? toClient(row) : undefined;\n\t},\n\tlistClients: async (ownerId) => {\n\t\tconst rows =\n\t\t\townerId === undefined\n\t\t\t\t? await db\n\t\t\t\t\t\t.select()\n\t\t\t\t\t\t.from(apiClientsTable)\n\t\t\t\t\t\t.orderBy(desc(apiClientsTable.created_at_ms))\n\t\t\t\t: await db\n\t\t\t\t\t\t.select()\n\t\t\t\t\t\t.from(apiClientsTable)\n\t\t\t\t\t\t.where(eq(apiClientsTable.owner_id, ownerId))\n\t\t\t\t\t\t.orderBy(desc(apiClientsTable.created_at_ms));\n\n\t\treturn rows.map(toClient);\n\t},\n\tsaveClient: async (client) => {\n\t\tconst values = toClientValues(client);\n\t\tawait db.insert(apiClientsTable).values(values).onConflictDoUpdate({\n\t\t\tset: values,\n\t\t\ttarget: apiClientsTable.client_id\n\t\t});\n\t}\n});\nexport const createPostgresApiKeyStore = <\n\tQ extends PgQueryResultHKT,\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig\n>(\n\tdb: AnyPgDatabase<Q, TFullSchema, TSchema>\n): ApiKeyStore => ({\n\tdeleteKey: async (keyId) => {\n\t\tawait db.delete(apiKeysTable).where(eq(apiKeysTable.key_id, keyId));\n\t},\n\tfindByHashedKey: async (hashedKey) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(apiKeysTable)\n\t\t\t.where(eq(apiKeysTable.hashed_key, hashedKey))\n\t\t\t.limit(1);\n\n\t\treturn row ? toKey(row) : undefined;\n\t},\n\tlistKeys: async (ownerId) => {\n\t\tconst rows =\n\t\t\townerId === undefined\n\t\t\t\t? await db\n\t\t\t\t\t\t.select()\n\t\t\t\t\t\t.from(apiKeysTable)\n\t\t\t\t\t\t.orderBy(desc(apiKeysTable.created_at_ms))\n\t\t\t\t: await db\n\t\t\t\t\t\t.select()\n\t\t\t\t\t\t.from(apiKeysTable)\n\t\t\t\t\t\t.where(eq(apiKeysTable.owner_id, ownerId))\n\t\t\t\t\t\t.orderBy(desc(apiKeysTable.created_at_ms));\n\n\t\treturn rows.map(toKey);\n\t},\n\tsaveKey: async (key) => {\n\t\tconst values = toKeyValues(key);\n\t\tawait db.insert(apiKeysTable).values(values).onConflictDoUpdate({\n\t\t\tset: values,\n\t\t\ttarget: apiKeysTable.key_id\n\t\t});\n\t},\n\ttouchKey: async (keyId, lastUsedAt) => {\n\t\tawait db\n\t\t\t.update(apiKeysTable)\n\t\t\t.set({ last_used_at_ms: lastUsedAt })\n\t\t\t.where(eq(apiKeysTable.key_id, keyId));\n\t}\n});\n",
12
+ "import { neon } from '@neondatabase/serverless';\nimport { drizzle } from 'drizzle-orm/neon-http';\nimport type { PgDatabase } from 'drizzle-orm/pg-core';\n\n// Shared scaffolding for the enterprise stores. Every new store ships an\n// in-memory implementation (dev/test) plus a Postgres implementation that accepts\n// a Drizzle `PgDatabase` — so it runs on Neon (neon-http) AND node-postgres without\n// the package bundling a second driver. `createNeonDatabase` is the convenience\n// wrapper consumers reach for when they just want a Neon connection string.\n\n// PgDatabase is effectively invariant over its three type parameters\n// (query-result HKT, full schema, relational schema), and TS can't reliably\n// re-infer those base params from a concrete driver *subclass*\n// (PostgresJsDatabase, NeonHttpDatabase, …). So the only way to accept any\n// driver with NO caller-side cast is a generic store constructor whose db\n// parameter is bound by `AnyPgDatabase`: `<DB extends AnyPgDatabase>(db: DB)`.\n// The `any`s live ONLY in this bound `DB` is inferred as the caller's exact\n// database type, so store bodies stay fully typed (this is not `db: any`).\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- constraint bound only; DB infers the caller's exact db type\nexport type AnyPgDatabase = PgDatabase<any, any, any>;\n\nexport const createNeonDatabase = (databaseUrl: string) =>\n\tdrizzle(neon(databaseUrl));\n",
13
+ "import { desc, eq, lt } from 'drizzle-orm';\nimport { bigint, pgTable, text, varchar } from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type {\n\tAccessToken,\n\tAccessTokenStore,\n\tApiClient,\n\tApiClientStore,\n\tApiKey,\n\tApiKeyStore\n} from './types';\n\nconst ID_LENGTH = 255;\n\nexport const accessTokensTable = pgTable('auth_access_tokens', {\n\tclient_id: varchar('client_id', { length: ID_LENGTH }).notNull(),\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\thashed_token: varchar('hashed_token', { length: ID_LENGTH }).notNull(),\n\towner_id: varchar('owner_id', { length: ID_LENGTH }),\n\tscopes: text('scopes').array().notNull(),\n\ttoken_id: varchar('token_id', { length: ID_LENGTH }).primaryKey()\n});\nexport const apiClientsTable = pgTable('auth_api_clients', {\n\tclient_id: varchar('client_id', { length: ID_LENGTH }).primaryKey(),\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\thashed_secret: varchar('hashed_secret', { length: ID_LENGTH }).notNull(),\n\tname: varchar('name', { length: ID_LENGTH }).notNull(),\n\towner_id: varchar('owner_id', { length: ID_LENGTH }),\n\tscopes: text('scopes').array().notNull()\n});\nexport const apiKeysTable = pgTable('auth_api_keys', {\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }),\n\thashed_key: varchar('hashed_key', { length: ID_LENGTH }).notNull(),\n\tkey_id: varchar('key_id', { length: ID_LENGTH }).primaryKey(),\n\tlast_used_at_ms: bigint('last_used_at_ms', { mode: 'number' }),\n\tname: varchar('name', { length: ID_LENGTH }).notNull(),\n\towner_id: varchar('owner_id', { length: ID_LENGTH }),\n\tprefix: varchar('prefix', { length: ID_LENGTH }).notNull(),\n\tscopes: text('scopes').array().notNull()\n});\n\ntype ApiKeyRow = typeof apiKeysTable.$inferSelect;\ntype ApiClientRow = typeof apiClientsTable.$inferSelect;\ntype AccessTokenRow = typeof accessTokensTable.$inferSelect;\n\nconst toKey = (row: ApiKeyRow): ApiKey => ({\n\tcreatedAt: row.created_at_ms,\n\texpiresAt: row.expires_at_ms ?? undefined,\n\thashedKey: row.hashed_key,\n\tkeyId: row.key_id,\n\tlastUsedAt: row.last_used_at_ms ?? undefined,\n\tname: row.name,\n\townerId: row.owner_id ?? undefined,\n\tprefix: row.prefix,\n\tscopes: row.scopes\n});\n\nconst toKeyValues = (key: ApiKey): typeof apiKeysTable.$inferInsert => ({\n\tcreated_at_ms: key.createdAt,\n\texpires_at_ms: key.expiresAt ?? null,\n\thashed_key: key.hashedKey,\n\tkey_id: key.keyId,\n\tlast_used_at_ms: key.lastUsedAt ?? null,\n\tname: key.name,\n\towner_id: key.ownerId ?? null,\n\tprefix: key.prefix,\n\tscopes: key.scopes\n});\n\nconst toClient = (row: ApiClientRow): ApiClient => ({\n\tclientId: row.client_id,\n\tcreatedAt: row.created_at_ms,\n\thashedSecret: row.hashed_secret,\n\tname: row.name,\n\townerId: row.owner_id ?? undefined,\n\tscopes: row.scopes\n});\n\nconst toClientValues = (\n\tclient: ApiClient\n): typeof apiClientsTable.$inferInsert => ({\n\tclient_id: client.clientId,\n\tcreated_at_ms: client.createdAt,\n\thashed_secret: client.hashedSecret,\n\tname: client.name,\n\towner_id: client.ownerId ?? null,\n\tscopes: client.scopes\n});\n\nconst toAccessToken = (row: AccessTokenRow): AccessToken => ({\n\tclientId: row.client_id,\n\tcreatedAt: row.created_at_ms,\n\texpiresAt: row.expires_at_ms,\n\thashedToken: row.hashed_token,\n\townerId: row.owner_id ?? undefined,\n\tscopes: row.scopes,\n\ttokenId: row.token_id\n});\n\nconst toAccessTokenValues = (\n\ttoken: AccessToken\n): typeof accessTokensTable.$inferInsert => ({\n\tclient_id: token.clientId,\n\tcreated_at_ms: token.createdAt,\n\texpires_at_ms: token.expiresAt,\n\thashed_token: token.hashedToken,\n\towner_id: token.ownerId ?? null,\n\tscopes: token.scopes,\n\ttoken_id: token.tokenId\n});\n\nexport const createNeonAccessTokenStore = (databaseUrl: string) =>\n\tcreatePostgresAccessTokenStore(createNeonDatabase(databaseUrl));\nexport const createNeonApiClientStore = (databaseUrl: string) =>\n\tcreatePostgresApiClientStore(createNeonDatabase(databaseUrl));\nexport const createNeonApiKeyStore = (databaseUrl: string) =>\n\tcreatePostgresApiKeyStore(createNeonDatabase(databaseUrl));\nexport const createPostgresAccessTokenStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): AccessTokenStore => ({\n\tdeleteExpired: async (now) => {\n\t\tawait db\n\t\t\t.delete(accessTokensTable)\n\t\t\t.where(lt(accessTokensTable.expires_at_ms, now));\n\t},\n\tdeleteToken: async (tokenId) => {\n\t\tawait db\n\t\t\t.delete(accessTokensTable)\n\t\t\t.where(eq(accessTokensTable.token_id, tokenId));\n\t},\n\tfindByHashedToken: async (hashedToken) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(accessTokensTable)\n\t\t\t.where(eq(accessTokensTable.hashed_token, hashedToken))\n\t\t\t.limit(1);\n\n\t\treturn row ? toAccessToken(row) : undefined;\n\t},\n\tsaveToken: async (token) => {\n\t\tconst values = toAccessTokenValues(token);\n\t\tawait db.insert(accessTokensTable).values(values).onConflictDoUpdate({\n\t\t\tset: values,\n\t\t\ttarget: accessTokensTable.token_id\n\t\t});\n\t}\n});\nexport const createPostgresApiClientStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): ApiClientStore => ({\n\tdeleteClient: async (clientId) => {\n\t\tawait db\n\t\t\t.delete(apiClientsTable)\n\t\t\t.where(eq(apiClientsTable.client_id, clientId));\n\t},\n\tfindClient: async (clientId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(apiClientsTable)\n\t\t\t.where(eq(apiClientsTable.client_id, clientId))\n\t\t\t.limit(1);\n\n\t\treturn row ? toClient(row) : undefined;\n\t},\n\tlistClients: async (ownerId) => {\n\t\tconst rows =\n\t\t\townerId === undefined\n\t\t\t\t? await db\n\t\t\t\t\t\t.select()\n\t\t\t\t\t\t.from(apiClientsTable)\n\t\t\t\t\t\t.orderBy(desc(apiClientsTable.created_at_ms))\n\t\t\t\t: await db\n\t\t\t\t\t\t.select()\n\t\t\t\t\t\t.from(apiClientsTable)\n\t\t\t\t\t\t.where(eq(apiClientsTable.owner_id, ownerId))\n\t\t\t\t\t\t.orderBy(desc(apiClientsTable.created_at_ms));\n\n\t\treturn rows.map(toClient);\n\t},\n\tsaveClient: async (client) => {\n\t\tconst values = toClientValues(client);\n\t\tawait db.insert(apiClientsTable).values(values).onConflictDoUpdate({\n\t\t\tset: values,\n\t\t\ttarget: apiClientsTable.client_id\n\t\t});\n\t}\n});\nexport const createPostgresApiKeyStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): ApiKeyStore => ({\n\tdeleteKey: async (keyId) => {\n\t\tawait db.delete(apiKeysTable).where(eq(apiKeysTable.key_id, keyId));\n\t},\n\tfindByHashedKey: async (hashedKey) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(apiKeysTable)\n\t\t\t.where(eq(apiKeysTable.hashed_key, hashedKey))\n\t\t\t.limit(1);\n\n\t\treturn row ? toKey(row) : undefined;\n\t},\n\tlistKeys: async (ownerId) => {\n\t\tconst rows =\n\t\t\townerId === undefined\n\t\t\t\t? await db\n\t\t\t\t\t\t.select()\n\t\t\t\t\t\t.from(apiKeysTable)\n\t\t\t\t\t\t.orderBy(desc(apiKeysTable.created_at_ms))\n\t\t\t\t: await db\n\t\t\t\t\t\t.select()\n\t\t\t\t\t\t.from(apiKeysTable)\n\t\t\t\t\t\t.where(eq(apiKeysTable.owner_id, ownerId))\n\t\t\t\t\t\t.orderBy(desc(apiKeysTable.created_at_ms));\n\n\t\treturn rows.map(toKey);\n\t},\n\tsaveKey: async (key) => {\n\t\tconst values = toKeyValues(key);\n\t\tawait db.insert(apiKeysTable).values(values).onConflictDoUpdate({\n\t\t\tset: values,\n\t\t\ttarget: apiKeysTable.key_id\n\t\t});\n\t},\n\ttouchKey: async (keyId, lastUsedAt) => {\n\t\tawait db\n\t\t\t.update(apiKeysTable)\n\t\t\t.set({ last_used_at_ms: lastUsedAt })\n\t\t\t.where(eq(apiKeysTable.key_id, keyId));\n\t}\n});\n",
14
14
  "import { desc, eq, lt } from 'drizzle-orm';\nimport { bigint, jsonb, pgTable, varchar } from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type { AuditEvent, AuditEventType, AuditSink } from './types';\n\nconst ID_LENGTH = 255;\nconst IP_LENGTH = 64;\nconst TYPE_LENGTH = 64;\nconst DEFAULT_AUDIT_LIMIT = 100;\n\nexport const auditEventsTable = pgTable('auth_audit_events', {\n\tat_ms: bigint('at_ms', { mode: 'number' }).notNull(),\n\tid: varchar('id', { length: ID_LENGTH }).primaryKey(),\n\tip: varchar('ip', { length: IP_LENGTH }),\n\tmetadata_json: jsonb('metadata_json').$type<Record<string, unknown>>(),\n\torganization_id: varchar('organization_id', { length: ID_LENGTH }),\n\ttype: varchar('type', { length: TYPE_LENGTH }).notNull(),\n\tuser_id: varchar('user_id', { length: ID_LENGTH })\n});\n\ntype AuditRow = typeof auditEventsTable.$inferSelect;\n\nconst toEvent = (row: AuditRow): AuditEvent => ({\n\tat: row.at_ms,\n\tip: row.ip ?? undefined,\n\tmetadata: row.metadata_json ?? undefined,\n\torganizationId: row.organization_id ?? undefined,\n\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- deserialization boundary: `type` was persisted from AuditEventType, so reading it back is sound\n\ttype: row.type as AuditEventType,\n\tuserId: row.user_id ?? undefined\n});\n\nexport const createNeonAuditSink = (databaseUrl: string) =>\n\tcreatePostgresAuditSink(createNeonDatabase(databaseUrl));\nexport const createPostgresAuditSink = (db: AnyPgDatabase): AuditSink => ({\n\tappend: async (event) => {\n\t\tawait db.insert(auditEventsTable).values({\n\t\t\tat_ms: event.at,\n\t\t\tid: crypto.randomUUID(),\n\t\t\tip: event.ip ?? null,\n\t\t\tmetadata_json: event.metadata ?? null,\n\t\t\torganization_id: event.organizationId ?? null,\n\t\t\ttype: event.type,\n\t\t\tuser_id: event.userId ?? null\n\t\t});\n\t},\n\tlist: async (filter) => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(auditEventsTable)\n\t\t\t.where(\n\t\t\t\tfilter?.userId\n\t\t\t\t\t? eq(auditEventsTable.user_id, filter.userId)\n\t\t\t\t\t: undefined\n\t\t\t)\n\t\t\t.orderBy(desc(auditEventsTable.at_ms))\n\t\t\t.limit(filter?.limit ?? DEFAULT_AUDIT_LIMIT);\n\n\t\treturn rows.map(toEvent);\n\t},\n\tprune: async (before) => {\n\t\tconst deleted = await db\n\t\t\t.delete(auditEventsTable)\n\t\t\t.where(lt(auditEventsTable.at_ms, before))\n\t\t\t.returning({ id: auditEventsTable.id });\n\n\t\treturn deleted.length;\n\t}\n});\n",
15
15
  "import { eq } from 'drizzle-orm';\nimport { bigint, boolean, pgTable, text, varchar } from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type {\n\tCredentialRecord,\n\tCredentialStatus,\n\tCredentialStore,\n\tCredentialToken\n} from './types';\n\nconst EMAIL_LENGTH = 320;\nconst ID_LENGTH = 255;\nconst STATUS_LENGTH = 32;\nconst TOKEN_HASH_LENGTH = 255;\n\nexport const credentialsTable = pgTable('auth_credentials', {\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\temail: varchar('email', { length: EMAIL_LENGTH }).primaryKey(),\n\temail_verified: boolean('email_verified').notNull().default(false),\n\torganization_id: varchar('organization_id', { length: ID_LENGTH }),\n\tpassword_hash: text('password_hash').notNull(),\n\tstatus: varchar('status', { length: STATUS_LENGTH })\n\t\t.notNull()\n\t\t.default('active'),\n\tupdated_at_ms: bigint('updated_at_ms', { mode: 'number' }).notNull(),\n\tuser_id: varchar('user_id', { length: ID_LENGTH })\n});\n\nconst createTokenTable = (name: string) =>\n\tpgTable(name, {\n\t\temail: varchar('email', { length: EMAIL_LENGTH }).notNull(),\n\t\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\t\ttoken_hash: varchar('token_hash', {\n\t\t\tlength: TOKEN_HASH_LENGTH\n\t\t}).primaryKey()\n\t});\n\nexport const credentialResetTokensTable = createTokenTable(\n\t'auth_credential_reset_tokens'\n);\nexport const credentialVerificationTokensTable = createTokenTable(\n\t'auth_credential_verification_tokens'\n);\n\ntype CredentialRow = typeof credentialsTable.$inferSelect;\ntype CredentialInsert = typeof credentialsTable.$inferInsert;\ntype TokenTable = ReturnType<typeof createTokenTable>;\ntype TokenRow = TokenTable['$inferSelect'];\ntype TokenInsert = TokenTable['$inferInsert'];\n\nconst CREDENTIAL_STATUSES: CredentialStatus[] = ['active', 'disabled'];\n\nconst isCredentialStatus = (value: string): value is CredentialStatus =>\n\tCREDENTIAL_STATUSES.some((status) => status === value);\n\nconst toCredentialRecord = (row: CredentialRow): CredentialRecord => ({\n\tcreatedAt: row.created_at_ms,\n\temail: row.email,\n\temailVerified: row.email_verified,\n\torganizationId: row.organization_id ?? undefined,\n\tpasswordHash: row.password_hash,\n\tstatus: isCredentialStatus(row.status) ? row.status : 'active',\n\tupdatedAt: row.updated_at_ms,\n\tuserId: row.user_id ?? undefined\n});\n\nconst toToken = (row: TokenRow): CredentialToken => ({\n\temail: row.email,\n\texpiresAt: row.expires_at_ms,\n\ttokenHash: row.token_hash\n});\n\nconst saveToken = async (\n\tdb: AnyPgDatabase,\n\ttable: TokenTable,\n\ttoken: CredentialToken\n) => {\n\tconst values: TokenInsert = {\n\t\temail: token.email.toLowerCase(),\n\t\texpires_at_ms: token.expiresAt,\n\t\ttoken_hash: token.tokenHash\n\t};\n\tawait db\n\t\t.insert(table)\n\t\t.values(values)\n\t\t.onConflictDoUpdate({ set: values, target: table.token_hash });\n};\n\nconst consumeToken = async (\n\tdb: AnyPgDatabase,\n\ttable: TokenTable,\n\ttokenHash: string\n) => {\n\tconst [row] = await db\n\t\t.select()\n\t\t.from(table)\n\t\t.where(eq(table.token_hash, tokenHash))\n\t\t.limit(1);\n\tif (!row) return undefined;\n\n\tawait db.delete(table).where(eq(table.token_hash, tokenHash));\n\tif (row.expires_at_ms < Date.now()) return undefined;\n\n\treturn toToken(row);\n};\n\nexport const createNeonCredentialStore = (databaseUrl: string) =>\n\tcreatePostgresCredentialStore(createNeonDatabase(databaseUrl));\nexport const createPostgresCredentialStore = (\n\tdb: AnyPgDatabase\n): CredentialStore => ({\n\tconsumeResetToken: (tokenHash) =>\n\t\tconsumeToken(db, credentialResetTokensTable, tokenHash),\n\tconsumeVerificationToken: (tokenHash) =>\n\t\tconsumeToken(db, credentialVerificationTokensTable, tokenHash),\n\tgetCredentialByEmail: async (email) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(credentialsTable)\n\t\t\t.where(eq(credentialsTable.email, email.toLowerCase()))\n\t\t\t.limit(1);\n\n\t\treturn row ? toCredentialRecord(row) : undefined;\n\t},\n\tsaveCredential: async (credential) => {\n\t\tconst values: CredentialInsert = {\n\t\t\tcreated_at_ms: credential.createdAt,\n\t\t\temail: credential.email.toLowerCase(),\n\t\t\temail_verified: credential.emailVerified,\n\t\t\torganization_id: credential.organizationId ?? null,\n\t\t\tpassword_hash: credential.passwordHash,\n\t\t\tstatus: credential.status,\n\t\t\tupdated_at_ms: credential.updatedAt,\n\t\t\tuser_id: credential.userId ?? null\n\t\t};\n\t\tawait db\n\t\t\t.insert(credentialsTable)\n\t\t\t.values(values)\n\t\t\t.onConflictDoUpdate({\n\t\t\t\tset: values,\n\t\t\t\ttarget: credentialsTable.email\n\t\t\t});\n\t},\n\tsaveResetToken: (token) => saveToken(db, credentialResetTokensTable, token),\n\tsaveVerificationToken: (token) =>\n\t\tsaveToken(db, credentialVerificationTokensTable, token),\n\tsetEmailVerified: async (email) => {\n\t\tawait db\n\t\t\t.update(credentialsTable)\n\t\t\t.set({ email_verified: true, updated_at_ms: Date.now() })\n\t\t\t.where(eq(credentialsTable.email, email.toLowerCase()));\n\t}\n});\n",
16
16
  "import { and, eq } from 'drizzle-orm';\nimport { pgTable, varchar } from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport { warrantKey } from './inMemoryStores';\nimport type { Warrant, WarrantStore } from './types';\n\nconst ID_LENGTH = 255;\n\nexport const warrantsTable = pgTable('auth_fga_warrants', {\n\tid: varchar('id', { length: ID_LENGTH }).primaryKey(),\n\trelation: varchar('relation', { length: ID_LENGTH }).notNull(),\n\tresource_id: varchar('resource_id', { length: ID_LENGTH }).notNull(),\n\tresource_type: varchar('resource_type', { length: ID_LENGTH }).notNull(),\n\tsubject_id: varchar('subject_id', { length: ID_LENGTH }).notNull(),\n\tsubject_relation: varchar('subject_relation', { length: ID_LENGTH }),\n\tsubject_type: varchar('subject_type', { length: ID_LENGTH }).notNull()\n});\n\ntype WarrantRow = typeof warrantsTable.$inferSelect;\n\nconst toWarrant = (row: WarrantRow): Warrant => ({\n\trelation: row.relation,\n\tresourceId: row.resource_id,\n\tresourceType: row.resource_type,\n\tsubjectId: row.subject_id,\n\tsubjectRelation: row.subject_relation ?? undefined,\n\tsubjectType: row.subject_type\n});\n\nexport const createNeonWarrantStore = (databaseUrl: string) =>\n\tcreatePostgresWarrantStore(createNeonDatabase(databaseUrl));\nexport const createPostgresWarrantStore = (\n\tdb: AnyPgDatabase\n): WarrantStore => ({\n\tdeleteWarrant: async (warrant) => {\n\t\tawait db\n\t\t\t.delete(warrantsTable)\n\t\t\t.where(eq(warrantsTable.id, warrantKey(warrant)));\n\t},\n\tlistForResource: async (resourceType, resourceId, relation) => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(warrantsTable)\n\t\t\t.where(\n\t\t\t\tand(\n\t\t\t\t\teq(warrantsTable.resource_type, resourceType),\n\t\t\t\t\teq(warrantsTable.resource_id, resourceId),\n\t\t\t\t\teq(warrantsTable.relation, relation)\n\t\t\t\t)\n\t\t\t);\n\n\t\treturn rows.map(toWarrant);\n\t},\n\tlistResourceIds: async (resourceType) => {\n\t\tconst rows = await db\n\t\t\t.selectDistinct({ resourceId: warrantsTable.resource_id })\n\t\t\t.from(warrantsTable)\n\t\t\t.where(eq(warrantsTable.resource_type, resourceType));\n\n\t\treturn rows.map((row) => row.resourceId);\n\t},\n\tsaveWarrant: async (warrant) => {\n\t\tawait db\n\t\t\t.insert(warrantsTable)\n\t\t\t.values({\n\t\t\t\tid: warrantKey(warrant),\n\t\t\t\trelation: warrant.relation,\n\t\t\t\tresource_id: warrant.resourceId,\n\t\t\t\tresource_type: warrant.resourceType,\n\t\t\t\tsubject_id: warrant.subjectId,\n\t\t\t\tsubject_relation: warrant.subjectRelation ?? null,\n\t\t\t\tsubject_type: warrant.subjectType\n\t\t\t})\n\t\t\t.onConflictDoNothing({ target: warrantsTable.id });\n\t}\n});\n",
@@ -19,14 +19,14 @@
19
19
  "import { eq } from 'drizzle-orm';\nimport { bigint, integer, pgTable, varchar } from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type { LockoutRecord, LockoutStore } from './types';\n\nconst KEY_LENGTH = 320;\n\nexport const lockoutsTable = pgTable('auth_lockouts', {\n\tfailed_attempts: integer('failed_attempts').notNull().default(0),\n\tkey: varchar('key', { length: KEY_LENGTH }).primaryKey(),\n\tlocked_until_ms: bigint('locked_until_ms', { mode: 'number' }),\n\twindow_started_at_ms: bigint('window_started_at_ms', {\n\t\tmode: 'number'\n\t}).notNull()\n});\n\ntype LockoutRow = typeof lockoutsTable.$inferSelect;\ntype LockoutInsert = typeof lockoutsTable.$inferInsert;\n\nconst toRecord = (row: LockoutRow): LockoutRecord => ({\n\tfailedAttempts: row.failed_attempts,\n\tkey: row.key,\n\tlockedUntil: row.locked_until_ms ?? undefined,\n\twindowStartedAt: row.window_started_at_ms\n});\n\nexport const createNeonLockoutStore = (databaseUrl: string) =>\n\tcreatePostgresLockoutStore(createNeonDatabase(databaseUrl));\nexport const createPostgresLockoutStore = (db: AnyPgDatabase): LockoutStore => {\n\tconst get = async (key: string) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(lockoutsTable)\n\t\t\t.where(eq(lockoutsTable.key, key))\n\t\t\t.limit(1);\n\n\t\treturn row ? toRecord(row) : undefined;\n\t};\n\tconst save = async (record: LockoutRecord) => {\n\t\tconst values: LockoutInsert = {\n\t\t\tfailed_attempts: record.failedAttempts,\n\t\t\tkey: record.key,\n\t\t\tlocked_until_ms: record.lockedUntil ?? null,\n\t\t\twindow_started_at_ms: record.windowStartedAt\n\t\t};\n\t\tawait db\n\t\t\t.insert(lockoutsTable)\n\t\t\t.values(values)\n\t\t\t.onConflictDoUpdate({ set: values, target: lockoutsTable.key });\n\t};\n\n\treturn {\n\t\tget,\n\t\tincrement: async (key, windowMs) => {\n\t\t\tconst now = Date.now();\n\t\t\tconst existing = await get(key);\n\t\t\tconst next: LockoutRecord =\n\t\t\t\texisting !== undefined &&\n\t\t\t\tnow - existing.windowStartedAt <= windowMs\n\t\t\t\t\t? {\n\t\t\t\t\t\t\t...existing,\n\t\t\t\t\t\t\tfailedAttempts: existing.failedAttempts + 1\n\t\t\t\t\t\t}\n\t\t\t\t\t: { failedAttempts: 1, key, windowStartedAt: now };\n\t\t\tawait save(next);\n\n\t\t\treturn next;\n\t\t},\n\t\tlock: async (key, lockedUntil) => {\n\t\t\tconst existing = (await get(key)) ?? {\n\t\t\t\tfailedAttempts: 0,\n\t\t\t\tkey,\n\t\t\t\twindowStartedAt: Date.now()\n\t\t\t};\n\t\t\tawait save({ ...existing, lockedUntil });\n\t\t},\n\t\treset: async (key) => {\n\t\t\tawait db.delete(lockoutsTable).where(eq(lockoutsTable.key, key));\n\t\t}\n\t};\n};\n",
20
20
  "import { eq } from 'drizzle-orm';\nimport {\n\tbigint,\n\tboolean,\n\tjsonb,\n\tpgTable,\n\ttext,\n\tvarchar\n} from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type { MfaEnrollment, MFAStore } from './types';\n\nconst ID_LENGTH = 255;\n\nexport const mfaEnrollmentsTable = pgTable('auth_mfa_enrollments', {\n\tbackup_code_hashes: jsonb('backup_code_hashes')\n\t\t.$type<string[]>()\n\t\t.notNull()\n\t\t.default([]),\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\tlast_used_at_ms: bigint('last_used_at_ms', { mode: 'number' }),\n\ttotp_secret_ciphertext: text('totp_secret_ciphertext'),\n\ttotp_verified: boolean('totp_verified').notNull().default(false),\n\tupdated_at_ms: bigint('updated_at_ms', { mode: 'number' }).notNull(),\n\tuser_id: varchar('user_id', { length: ID_LENGTH }).primaryKey()\n});\n\ntype MfaRow = typeof mfaEnrollmentsTable.$inferSelect;\ntype MfaInsert = typeof mfaEnrollmentsTable.$inferInsert;\n\nconst toEnrollment = (row: MfaRow): MfaEnrollment => ({\n\tbackupCodeHashes: row.backup_code_hashes,\n\tcreatedAt: row.created_at_ms,\n\tlastUsedAt: row.last_used_at_ms ?? undefined,\n\ttotpSecretCiphertext: row.totp_secret_ciphertext ?? undefined,\n\ttotpVerified: row.totp_verified,\n\tupdatedAt: row.updated_at_ms,\n\tuserId: row.user_id\n});\n\nexport const createNeonMfaStore = (databaseUrl: string) =>\n\tcreatePostgresMfaStore(createNeonDatabase(databaseUrl));\nexport const createPostgresMfaStore = (db: AnyPgDatabase): MFAStore => ({\n\tgetEnrollment: async (userId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(mfaEnrollmentsTable)\n\t\t\t.where(eq(mfaEnrollmentsTable.user_id, userId))\n\t\t\t.limit(1);\n\n\t\treturn row ? toEnrollment(row) : undefined;\n\t},\n\tlistEnrollments: async () => {\n\t\tconst rows = await db.select().from(mfaEnrollmentsTable);\n\n\t\treturn rows.map(toEnrollment);\n\t},\n\tremoveEnrollment: async (userId) => {\n\t\tawait db\n\t\t\t.delete(mfaEnrollmentsTable)\n\t\t\t.where(eq(mfaEnrollmentsTable.user_id, userId));\n\t},\n\tsaveEnrollment: async (enrollment) => {\n\t\tconst values: MfaInsert = {\n\t\t\tbackup_code_hashes: enrollment.backupCodeHashes,\n\t\t\tcreated_at_ms: enrollment.createdAt,\n\t\t\tlast_used_at_ms: enrollment.lastUsedAt ?? null,\n\t\t\ttotp_secret_ciphertext: enrollment.totpSecretCiphertext ?? null,\n\t\t\ttotp_verified: enrollment.totpVerified,\n\t\t\tupdated_at_ms: enrollment.updatedAt,\n\t\t\tuser_id: enrollment.userId\n\t\t};\n\t\tawait db.insert(mfaEnrollmentsTable).values(values).onConflictDoUpdate({\n\t\t\tset: values,\n\t\t\ttarget: mfaEnrollmentsTable.user_id\n\t\t});\n\t}\n});\n",
21
21
  "import { and, desc, eq, gt, lt } from 'drizzle-orm';\nimport {\n\tbigint,\n\tboolean,\n\tjsonb,\n\tpgTable,\n\ttext,\n\tvarchar\n} from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type {\n\tAuthorizationCode,\n\tAuthorizationCodeStore,\n\tBackchannelAuthRequest,\n\tBackchannelAuthStatus,\n\tBackchannelAuthStore,\n\tClientAssertionJtiStore,\n\tClientRegistrationToken,\n\tClientRegistrationTokenStore,\n\tDeviceAuthorization,\n\tDeviceAuthorizationStatus,\n\tDeviceAuthorizationStore,\n\tInitialAccessTokenStore,\n\tLogoutDelivery,\n\tLogoutDeliveryStore,\n\tOAuthClient,\n\tOAuthClientStore,\n\tOidcRefreshToken,\n\tOidcRefreshTokenStore,\n\tPushedAuthorizationRequest,\n\tPushedAuthorizationRequestStore\n} from './types';\n\nconst URL_LENGTH = 2048;\nconst DEFAULT_LIST_LIMIT = 100;\n\nconst ID_LENGTH = 255;\n\nexport const oauthBackchannelAuthRequestsTable = pgTable(\n\t'auth_oauth_backchannel_auth_requests',\n\t{\n\t\tauth_req_id: varchar('auth_req_id', { length: ID_LENGTH }).primaryKey(),\n\t\tbinding_message: text('binding_message'),\n\t\tclient_id: varchar('client_id', { length: ID_LENGTH }).notNull(),\n\t\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\t\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\t\tinterval_seconds: bigint('interval_seconds', {\n\t\t\tmode: 'number'\n\t\t}).notNull(),\n\t\tlast_polled_at_ms: bigint('last_polled_at_ms', { mode: 'number' }),\n\t\tscopes: text('scopes').array().notNull(),\n\t\tstatus: varchar('status', { length: 16 }).notNull(),\n\t\tuser_sub: varchar('user_sub', { length: ID_LENGTH })\n\t}\n);\nexport const oauthClientAssertionJtisTable = pgTable(\n\t'auth_oauth_client_assertion_jtis',\n\t{\n\t\tclient_id: varchar('client_id', { length: ID_LENGTH }).notNull(),\n\t\tcomposite_key: varchar('composite_key', {\n\t\t\tlength: ID_LENGTH\n\t\t}).primaryKey(),\n\t\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\t\tjti: varchar('jti', { length: ID_LENGTH }).notNull()\n\t}\n);\nexport const oauthClientRegistrationTokensTable = pgTable(\n\t'auth_oauth_client_registration_tokens',\n\t{\n\t\tclient_id: varchar('client_id', { length: ID_LENGTH }).notNull(),\n\t\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\t\ttoken_hash: varchar('token_hash', { length: ID_LENGTH }).primaryKey()\n\t}\n);\nexport const oauthClientsTable = pgTable('auth_oauth_clients', {\n\tbackchannel_logout_uri: varchar('backchannel_logout_uri', {\n\t\tlength: URL_LENGTH\n\t}),\n\tclient_id: varchar('client_id', { length: ID_LENGTH }).primaryKey(),\n\thashed_secret: varchar('hashed_secret', { length: ID_LENGTH }),\n\tjwks_json: jsonb('jwks_json').$type<JsonWebKey[]>(),\n\tjwks_uri: varchar('jwks_uri', { length: URL_LENGTH }),\n\tname: varchar('name', { length: ID_LENGTH }).notNull(),\n\tpost_logout_redirect_uris: text('post_logout_redirect_uris').array(),\n\tredirect_uris: text('redirect_uris').array().notNull(),\n\trequire_pushed_authorization_requests: boolean(\n\t\t'require_pushed_authorization_requests'\n\t),\n\trequire_signed_request_object: boolean('require_signed_request_object'),\n\tscopes: text('scopes').array().notNull()\n});\nexport const oauthCodesTable = pgTable('auth_oauth_codes', {\n\tacr: varchar('acr', { length: ID_LENGTH }),\n\tclaims_json: jsonb('claims_json').$type<Record<string, unknown>>(),\n\tclient_id: varchar('client_id', { length: ID_LENGTH }).notNull(),\n\tcode_challenge: varchar('code_challenge', { length: ID_LENGTH }).notNull(),\n\tcode_hash: varchar('code_hash', { length: ID_LENGTH }).primaryKey(),\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\tdpop_jkt: varchar('dpop_jkt', { length: ID_LENGTH }),\n\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\tnonce: varchar('nonce', { length: ID_LENGTH }),\n\tredirect_uri: varchar('redirect_uri', { length: ID_LENGTH }).notNull(),\n\tscopes: text('scopes').array().notNull(),\n\tuser_id: varchar('user_id', { length: ID_LENGTH }).notNull()\n});\nexport const oauthDeviceAuthorizationsTable = pgTable(\n\t'auth_oauth_device_authorizations',\n\t{\n\t\tclient_id: varchar('client_id', { length: ID_LENGTH }).notNull(),\n\t\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\t\tdevice_code_hash: varchar('device_code_hash', {\n\t\t\tlength: ID_LENGTH\n\t\t}).primaryKey(),\n\t\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\t\tinterval_seconds: bigint('interval_seconds', {\n\t\t\tmode: 'number'\n\t\t}).notNull(),\n\t\tscopes: text('scopes').array().notNull(),\n\t\tstatus: varchar('status', { length: 16 }).notNull(),\n\t\tuser_code: varchar('user_code', { length: 16 }).notNull().unique(),\n\t\tuser_sub: varchar('user_sub', { length: ID_LENGTH })\n\t}\n);\nexport const oauthInitialAccessTokensTable = pgTable(\n\t'auth_oauth_initial_access_tokens',\n\t{\n\t\ttoken_hash: varchar('token_hash', { length: ID_LENGTH }).primaryKey()\n\t}\n);\nexport const oauthLogoutDeliveriesTable = pgTable(\n\t'auth_oauth_logout_deliveries',\n\t{\n\t\tattempts: bigint('attempts', { mode: 'number' }).notNull(),\n\t\tclient_id: varchar('client_id', { length: ID_LENGTH }).notNull(),\n\t\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\t\tendpoint_url: varchar('endpoint_url', { length: URL_LENGTH }).notNull(),\n\t\tid: varchar('id', { length: ID_LENGTH }).primaryKey(),\n\t\tlast_error: text('last_error'),\n\t\tlast_status: bigint('last_status', { mode: 'number' }),\n\t\tlogout_token: text('logout_token').notNull(),\n\t\tuser_id: varchar('user_id', { length: ID_LENGTH }).notNull()\n\t}\n);\nexport const oauthPushedAuthorizationRequestsTable = pgTable(\n\t'auth_oauth_pushed_authorization_requests',\n\t{\n\t\tclient_id: varchar('client_id', { length: ID_LENGTH }).notNull(),\n\t\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\t\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\t\tparams_json: jsonb('params_json')\n\t\t\t.$type<Record<string, string>>()\n\t\t\t.notNull(),\n\t\trequest_uri_hash: varchar('request_uri_hash', {\n\t\t\tlength: ID_LENGTH\n\t\t}).primaryKey()\n\t}\n);\nexport const oauthRefreshTokensTable = pgTable('auth_oauth_refresh_tokens', {\n\tacr: varchar('acr', { length: ID_LENGTH }),\n\tclaims_json: jsonb('claims_json').$type<Record<string, unknown>>(),\n\tclient_id: varchar('client_id', { length: ID_LENGTH }).notNull(),\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\tdpop_jkt: varchar('dpop_jkt', { length: ID_LENGTH }),\n\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\tscopes: text('scopes').array().notNull(),\n\ttoken_hash: varchar('token_hash', { length: ID_LENGTH }).primaryKey(),\n\tuser_id: varchar('user_id', { length: ID_LENGTH }).notNull()\n});\n\ntype ClientRow = typeof oauthClientsTable.$inferSelect;\ntype CodeRow = typeof oauthCodesTable.$inferSelect;\ntype DeviceAuthRow = typeof oauthDeviceAuthorizationsTable.$inferSelect;\ntype LogoutDeliveryRow = typeof oauthLogoutDeliveriesTable.$inferSelect;\ntype RefreshRow = typeof oauthRefreshTokensTable.$inferSelect;\n\nconst toClient = (row: ClientRow): OAuthClient => ({\n\tbackchannelLogoutUri: row.backchannel_logout_uri ?? undefined,\n\tclientId: row.client_id,\n\thashedSecret: row.hashed_secret ?? undefined,\n\tjwks: row.jwks_json ?? undefined,\n\tjwksUri: row.jwks_uri ?? undefined,\n\tname: row.name,\n\tpostLogoutRedirectUris: row.post_logout_redirect_uris ?? undefined,\n\tredirectUris: row.redirect_uris,\n\trequirePushedAuthorizationRequests:\n\t\trow.require_pushed_authorization_requests ?? undefined,\n\trequireSignedRequestObject: row.require_signed_request_object ?? undefined,\n\tscopes: row.scopes\n});\n\nconst toLogoutDelivery = (row: LogoutDeliveryRow): LogoutDelivery => ({\n\tattempts: row.attempts,\n\tclientId: row.client_id,\n\tcreatedAt: row.created_at_ms,\n\tendpointUrl: row.endpoint_url,\n\tid: row.id,\n\tlastError: row.last_error ?? undefined,\n\tlastStatus: row.last_status ?? undefined,\n\tlogoutToken: row.logout_token,\n\tuserId: row.user_id\n});\n\nconst toCode = (row: CodeRow): AuthorizationCode => ({\n\tacr: row.acr ?? undefined,\n\tclaims: row.claims_json ?? undefined,\n\tclientId: row.client_id,\n\tcodeChallenge: row.code_challenge,\n\tcodeHash: row.code_hash,\n\tcreatedAt: row.created_at_ms,\n\tdpopJkt: row.dpop_jkt ?? undefined,\n\texpiresAt: row.expires_at_ms,\n\tnonce: row.nonce ?? undefined,\n\tredirectUri: row.redirect_uri,\n\tscopes: row.scopes,\n\tuserId: row.user_id\n});\n\nconst toCodeValues = (\n\tcode: AuthorizationCode\n): typeof oauthCodesTable.$inferInsert => ({\n\tacr: code.acr ?? null,\n\tclaims_json: code.claims ?? null,\n\tclient_id: code.clientId,\n\tcode_challenge: code.codeChallenge,\n\tcode_hash: code.codeHash,\n\tcreated_at_ms: code.createdAt,\n\tdpop_jkt: code.dpopJkt ?? null,\n\texpires_at_ms: code.expiresAt,\n\tnonce: code.nonce ?? null,\n\tredirect_uri: code.redirectUri,\n\tscopes: code.scopes,\n\tuser_id: code.userId\n});\n\nconst toDeviceAuth = (row: DeviceAuthRow): DeviceAuthorization => ({\n\tclientId: row.client_id,\n\tcreatedAt: row.created_at_ms,\n\tdeviceCodeHash: row.device_code_hash,\n\texpiresAt: row.expires_at_ms,\n\tintervalSeconds: row.interval_seconds,\n\tscopes: row.scopes,\n\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- deserialization boundary: status was persisted from DeviceAuthorizationStatus\n\tstatus: row.status as DeviceAuthorizationStatus,\n\tuserCode: row.user_code,\n\tuserSub: row.user_sub ?? undefined\n});\n\nconst toRefresh = (row: RefreshRow): OidcRefreshToken => ({\n\tacr: row.acr ?? undefined,\n\tclaims: row.claims_json ?? undefined,\n\tclientId: row.client_id,\n\tcreatedAt: row.created_at_ms,\n\tdpopJkt: row.dpop_jkt ?? undefined,\n\texpiresAt: row.expires_at_ms,\n\tscopes: row.scopes,\n\ttokenHash: row.token_hash,\n\tuserId: row.user_id\n});\n\nconst toRefreshValues = (\n\ttoken: OidcRefreshToken\n): typeof oauthRefreshTokensTable.$inferInsert => ({\n\tacr: token.acr ?? null,\n\tclaims_json: token.claims ?? null,\n\tclient_id: token.clientId,\n\tcreated_at_ms: token.createdAt,\n\tdpop_jkt: token.dpopJkt ?? null,\n\texpires_at_ms: token.expiresAt,\n\tscopes: token.scopes,\n\ttoken_hash: token.tokenHash,\n\tuser_id: token.userId\n});\n\nexport const createNeonAuthorizationCodeStore = (databaseUrl: string) =>\n\tcreatePostgresAuthorizationCodeStore(createNeonDatabase(databaseUrl));\nexport const createNeonClientAssertionJtiStore = (databaseUrl: string) =>\n\tcreatePostgresClientAssertionJtiStore(createNeonDatabase(databaseUrl));\nexport const createNeonClientRegistrationTokenStore = (databaseUrl: string) =>\n\tcreatePostgresClientRegistrationTokenStore(createNeonDatabase(databaseUrl));\nexport const createNeonDeviceAuthorizationStore = (databaseUrl: string) =>\n\tcreatePostgresDeviceAuthorizationStore(createNeonDatabase(databaseUrl));\nexport const createNeonInitialAccessTokenStore = (databaseUrl: string) =>\n\tcreatePostgresInitialAccessTokenStore(createNeonDatabase(databaseUrl));\nexport const createNeonLogoutDeliveryStore = (databaseUrl: string) =>\n\tcreatePostgresLogoutDeliveryStore(createNeonDatabase(databaseUrl));\nexport const createNeonOAuthClientStore = (databaseUrl: string) =>\n\tcreatePostgresOAuthClientStore(createNeonDatabase(databaseUrl));\nexport const createNeonOidcRefreshTokenStore = (databaseUrl: string) =>\n\tcreatePostgresOidcRefreshTokenStore(createNeonDatabase(databaseUrl));\nexport const createNeonPushedAuthorizationRequestStore = (\n\tdatabaseUrl: string\n) =>\n\tcreatePostgresPushedAuthorizationRequestStore(\n\t\tcreateNeonDatabase(databaseUrl)\n\t);\nexport const createPostgresAuthorizationCodeStore = (\n\tdb: AnyPgDatabase\n): AuthorizationCodeStore => ({\n\tconsumeCode: async (codeHash) => {\n\t\tconst [row] = await db\n\t\t\t.delete(oauthCodesTable)\n\t\t\t.where(eq(oauthCodesTable.code_hash, codeHash))\n\t\t\t.returning();\n\n\t\treturn row ? toCode(row) : undefined;\n\t},\n\tsaveCode: async (code) => {\n\t\tawait db.insert(oauthCodesTable).values(toCodeValues(code));\n\t}\n});\nexport const createPostgresClientAssertionJtiStore = (\n\tdb: AnyPgDatabase\n): ClientAssertionJtiStore => ({\n\trecordIfFresh: async (clientId, jti, expiresAt) => {\n\t\t// Lazy GC of expired entries on each call. Bounded by the assertion `exp` window\n\t\t// (~5 min), so this stays cheap even at high call volume.\n\t\tawait db\n\t\t\t.delete(oauthClientAssertionJtisTable)\n\t\t\t.where(lt(oauthClientAssertionJtisTable.expires_at_ms, Date.now()));\n\t\tconst compositeKey = `${clientId}|${jti}`;\n\t\ttry {\n\t\t\tawait db.insert(oauthClientAssertionJtisTable).values({\n\t\t\t\tclient_id: clientId,\n\t\t\t\tcomposite_key: compositeKey,\n\t\t\t\texpires_at_ms: expiresAt,\n\t\t\t\tjti\n\t\t\t});\n\n\t\t\treturn true;\n\t\t} catch {\n\t\t\t// PK collision = we've seen this jti for this client before = replay.\n\t\t\treturn false;\n\t\t}\n\t}\n});\nexport const createPostgresClientRegistrationTokenStore = (\n\tdb: AnyPgDatabase\n): ClientRegistrationTokenStore => ({\n\tdeleteByClientId: async (clientId) => {\n\t\tawait db\n\t\t\t.delete(oauthClientRegistrationTokensTable)\n\t\t\t.where(eq(oauthClientRegistrationTokensTable.client_id, clientId));\n\t},\n\tfindByTokenHash: async (tokenHash) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(oauthClientRegistrationTokensTable)\n\t\t\t.where(eq(oauthClientRegistrationTokensTable.token_hash, tokenHash))\n\t\t\t.limit(1);\n\t\tif (!row) return undefined;\n\t\tconst token: ClientRegistrationToken = {\n\t\t\tclientId: row.client_id,\n\t\t\tcreatedAt: row.created_at_ms,\n\t\t\ttokenHash: row.token_hash\n\t\t};\n\n\t\treturn token;\n\t},\n\tsaveToken: async (token) => {\n\t\t// One reg token per client — drop any prior token before saving.\n\t\tawait db\n\t\t\t.delete(oauthClientRegistrationTokensTable)\n\t\t\t.where(\n\t\t\t\teq(oauthClientRegistrationTokensTable.client_id, token.clientId)\n\t\t\t);\n\t\tawait db.insert(oauthClientRegistrationTokensTable).values({\n\t\t\tclient_id: token.clientId,\n\t\t\tcreated_at_ms: token.createdAt,\n\t\t\ttoken_hash: token.tokenHash\n\t\t});\n\t}\n});\nexport const createPostgresDeviceAuthorizationStore = (\n\tdb: AnyPgDatabase\n): DeviceAuthorizationStore => ({\n\tdeleteByDeviceCodeHash: async (deviceCodeHash) => {\n\t\tawait db\n\t\t\t.delete(oauthDeviceAuthorizationsTable)\n\t\t\t.where(\n\t\t\t\teq(\n\t\t\t\t\toauthDeviceAuthorizationsTable.device_code_hash,\n\t\t\t\t\tdeviceCodeHash\n\t\t\t\t)\n\t\t\t);\n\t},\n\tfindByDeviceCodeHash: async (deviceCodeHash) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(oauthDeviceAuthorizationsTable)\n\t\t\t.where(\n\t\t\t\teq(\n\t\t\t\t\toauthDeviceAuthorizationsTable.device_code_hash,\n\t\t\t\t\tdeviceCodeHash\n\t\t\t\t)\n\t\t\t)\n\t\t\t.limit(1);\n\n\t\treturn row ? toDeviceAuth(row) : undefined;\n\t},\n\tfindByUserCode: async (userCode) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(oauthDeviceAuthorizationsTable)\n\t\t\t.where(eq(oauthDeviceAuthorizationsTable.user_code, userCode))\n\t\t\t.limit(1);\n\n\t\treturn row ? toDeviceAuth(row) : undefined;\n\t},\n\tsaveDeviceAuthorization: async (deviceAuthorization) => {\n\t\tawait db.insert(oauthDeviceAuthorizationsTable).values({\n\t\t\tclient_id: deviceAuthorization.clientId,\n\t\t\tcreated_at_ms: deviceAuthorization.createdAt,\n\t\t\tdevice_code_hash: deviceAuthorization.deviceCodeHash,\n\t\t\texpires_at_ms: deviceAuthorization.expiresAt,\n\t\t\tinterval_seconds: deviceAuthorization.intervalSeconds,\n\t\t\tscopes: deviceAuthorization.scopes,\n\t\t\tstatus: deviceAuthorization.status,\n\t\t\tuser_code: deviceAuthorization.userCode,\n\t\t\tuser_sub: deviceAuthorization.userSub ?? null\n\t\t});\n\t},\n\tupdateStatus: async (deviceCodeHash, status, userSub) => {\n\t\tawait db\n\t\t\t.update(oauthDeviceAuthorizationsTable)\n\t\t\t.set({ status, user_sub: userSub ?? null })\n\t\t\t.where(\n\t\t\t\teq(\n\t\t\t\t\toauthDeviceAuthorizationsTable.device_code_hash,\n\t\t\t\t\tdeviceCodeHash\n\t\t\t\t)\n\t\t\t);\n\t}\n});\nexport const createPostgresInitialAccessTokenStore = (\n\tdb: AnyPgDatabase\n): InitialAccessTokenStore => ({\n\tconsumeToken: async (tokenHash) => {\n\t\tconst deleted = await db\n\t\t\t.delete(oauthInitialAccessTokensTable)\n\t\t\t.where(eq(oauthInitialAccessTokensTable.token_hash, tokenHash))\n\t\t\t.returning({\n\t\t\t\ttoken_hash: oauthInitialAccessTokensTable.token_hash\n\t\t\t});\n\n\t\treturn deleted.length > 0;\n\t}\n});\nexport const createPostgresLogoutDeliveryStore = (\n\tdb: AnyPgDatabase\n): LogoutDeliveryStore => ({\n\tlistFailed: async (limit = DEFAULT_LIST_LIMIT) => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(oauthLogoutDeliveriesTable)\n\t\t\t.orderBy(desc(oauthLogoutDeliveriesTable.created_at_ms))\n\t\t\t.limit(limit);\n\n\t\treturn rows.map(toLogoutDelivery);\n\t},\n\trecordFailure: async (delivery) => {\n\t\tawait db.insert(oauthLogoutDeliveriesTable).values({\n\t\t\tattempts: delivery.attempts,\n\t\t\tclient_id: delivery.clientId,\n\t\t\tcreated_at_ms: delivery.createdAt,\n\t\t\tendpoint_url: delivery.endpointUrl,\n\t\t\tid: delivery.id,\n\t\t\tlast_error: delivery.lastError ?? null,\n\t\t\tlast_status: delivery.lastStatus ?? null,\n\t\t\tlogout_token: delivery.logoutToken,\n\t\t\tuser_id: delivery.userId\n\t\t});\n\t},\n\tremoveFailure: async (deliveryId) => {\n\t\tawait db\n\t\t\t.delete(oauthLogoutDeliveriesTable)\n\t\t\t.where(eq(oauthLogoutDeliveriesTable.id, deliveryId));\n\t}\n});\n// Maps an OAuthClient domain object to the row shape (used by saveClient + updateClient).\nconst toClientValues = (\n\tclient: OAuthClient\n): typeof oauthClientsTable.$inferInsert => ({\n\tbackchannel_logout_uri: client.backchannelLogoutUri ?? null,\n\tclient_id: client.clientId,\n\thashed_secret: client.hashedSecret ?? null,\n\tjwks_json: client.jwks ?? null,\n\tjwks_uri: client.jwksUri ?? null,\n\tname: client.name,\n\tpost_logout_redirect_uris: client.postLogoutRedirectUris ?? null,\n\tredirect_uris: client.redirectUris,\n\trequire_pushed_authorization_requests:\n\t\tclient.requirePushedAuthorizationRequests ?? null,\n\trequire_signed_request_object: client.requireSignedRequestObject ?? null,\n\tscopes: client.scopes\n});\n\nexport const createPostgresOAuthClientStore = (\n\tdb: AnyPgDatabase\n): OAuthClientStore => ({\n\tdeleteClient: async (clientId) => {\n\t\tawait db\n\t\t\t.delete(oauthClientsTable)\n\t\t\t.where(eq(oauthClientsTable.client_id, clientId));\n\t},\n\tfindClient: async (clientId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(oauthClientsTable)\n\t\t\t.where(eq(oauthClientsTable.client_id, clientId))\n\t\t\t.limit(1);\n\n\t\treturn row ? toClient(row) : undefined;\n\t},\n\tsaveClient: async (client) => {\n\t\tawait db.insert(oauthClientsTable).values(toClientValues(client));\n\t},\n\tupdateClient: async (clientId, client) => {\n\t\tawait db\n\t\t\t.update(oauthClientsTable)\n\t\t\t.set(toClientValues(client))\n\t\t\t.where(eq(oauthClientsTable.client_id, clientId));\n\t}\n});\nexport const createPostgresOidcRefreshTokenStore = (\n\tdb: AnyPgDatabase\n): OidcRefreshTokenStore => ({\n\tconsumeToken: async (tokenHash) => {\n\t\tconst [row] = await db\n\t\t\t.delete(oauthRefreshTokensTable)\n\t\t\t.where(eq(oauthRefreshTokensTable.token_hash, tokenHash))\n\t\t\t.returning();\n\n\t\treturn row ? toRefresh(row) : undefined;\n\t},\n\tdeleteForUser: async (userId) => {\n\t\tawait db\n\t\t\t.delete(oauthRefreshTokensTable)\n\t\t\t.where(eq(oauthRefreshTokensTable.user_id, userId));\n\t},\n\tgetToken: async (tokenHash) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(oauthRefreshTokensTable)\n\t\t\t.where(eq(oauthRefreshTokensTable.token_hash, tokenHash))\n\t\t\t.limit(1);\n\n\t\treturn row ? toRefresh(row) : undefined;\n\t},\n\tlistClientIdsForUser: async (userId) => {\n\t\tconst rows = await db\n\t\t\t.selectDistinct({ client_id: oauthRefreshTokensTable.client_id })\n\t\t\t.from(oauthRefreshTokensTable)\n\t\t\t.where(\n\t\t\t\tand(\n\t\t\t\t\teq(oauthRefreshTokensTable.user_id, userId),\n\t\t\t\t\tgt(oauthRefreshTokensTable.expires_at_ms, Date.now())\n\t\t\t\t)\n\t\t\t);\n\n\t\treturn rows.map((row) => row.client_id);\n\t},\n\tsaveToken: async (token) => {\n\t\tawait db.insert(oauthRefreshTokensTable).values(toRefreshValues(token));\n\t}\n});\nexport const createPostgresPushedAuthorizationRequestStore = (\n\tdb: AnyPgDatabase\n): PushedAuthorizationRequestStore => ({\n\tconsumeRequest: async (requestUriHash) => {\n\t\tconst [row] = await db\n\t\t\t.delete(oauthPushedAuthorizationRequestsTable)\n\t\t\t.where(\n\t\t\t\teq(\n\t\t\t\t\toauthPushedAuthorizationRequestsTable.request_uri_hash,\n\t\t\t\t\trequestUriHash\n\t\t\t\t)\n\t\t\t)\n\t\t\t.returning();\n\t\tif (!row) return undefined;\n\t\t// Lazy GC of expired rows from prior writes — keeps the table thin without a\n\t\t// dedicated cron. Same call returns undefined if THIS request was already expired.\n\t\tawait db\n\t\t\t.delete(oauthPushedAuthorizationRequestsTable)\n\t\t\t.where(\n\t\t\t\tlt(\n\t\t\t\t\toauthPushedAuthorizationRequestsTable.expires_at_ms,\n\t\t\t\t\tDate.now()\n\t\t\t\t)\n\t\t\t);\n\t\tif (row.expires_at_ms < Date.now()) return undefined;\n\t\tconst request: PushedAuthorizationRequest = {\n\t\t\tclientId: row.client_id,\n\t\t\tcreatedAt: row.created_at_ms,\n\t\t\texpiresAt: row.expires_at_ms,\n\t\t\tparams: row.params_json,\n\t\t\trequestUriHash: row.request_uri_hash\n\t\t};\n\n\t\treturn request;\n\t},\n\tsaveRequest: async (request) => {\n\t\tawait db.insert(oauthPushedAuthorizationRequestsTable).values({\n\t\t\tclient_id: request.clientId,\n\t\t\tcreated_at_ms: request.createdAt,\n\t\t\texpires_at_ms: request.expiresAt,\n\t\t\tparams_json: request.params,\n\t\t\trequest_uri_hash: request.requestUriHash\n\t\t});\n\t}\n});\n\ntype BackchannelAuthRow = typeof oauthBackchannelAuthRequestsTable.$inferSelect;\n\nconst toBackchannelAuth = (\n\trow: BackchannelAuthRow\n): BackchannelAuthRequest => ({\n\tauthReqId: row.auth_req_id,\n\tbindingMessage: row.binding_message ?? undefined,\n\tclientId: row.client_id,\n\tcreatedAt: row.created_at_ms,\n\texpiresAt: row.expires_at_ms,\n\tintervalSeconds: row.interval_seconds,\n\tlastPolledAt: row.last_polled_at_ms ?? undefined,\n\tscopes: row.scopes,\n\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- deserialization boundary: status was persisted from BackchannelAuthStatus\n\tstatus: row.status as BackchannelAuthStatus,\n\tuserSub: row.user_sub ?? undefined\n});\n\nexport const createNeonBackchannelAuthStore = (databaseUrl: string) =>\n\tcreatePostgresBackchannelAuthStore(createNeonDatabase(databaseUrl));\n\nexport const createPostgresBackchannelAuthStore = (\n\tdb: AnyPgDatabase\n): BackchannelAuthStore => ({\n\tdeleteByAuthReqId: async (authReqId) => {\n\t\tawait db\n\t\t\t.delete(oauthBackchannelAuthRequestsTable)\n\t\t\t.where(\n\t\t\t\teq(oauthBackchannelAuthRequestsTable.auth_req_id, authReqId)\n\t\t\t);\n\t},\n\tfindByAuthReqId: async (authReqId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(oauthBackchannelAuthRequestsTable)\n\t\t\t.where(eq(oauthBackchannelAuthRequestsTable.auth_req_id, authReqId))\n\t\t\t.limit(1);\n\n\t\treturn row ? toBackchannelAuth(row) : undefined;\n\t},\n\trecordPoll: async (authReqId, polledAt) => {\n\t\tawait db\n\t\t\t.update(oauthBackchannelAuthRequestsTable)\n\t\t\t.set({ last_polled_at_ms: polledAt })\n\t\t\t.where(\n\t\t\t\teq(oauthBackchannelAuthRequestsTable.auth_req_id, authReqId)\n\t\t\t);\n\t},\n\tsaveBackchannelAuth: async (request) => {\n\t\tawait db.insert(oauthBackchannelAuthRequestsTable).values({\n\t\t\tauth_req_id: request.authReqId,\n\t\t\tbinding_message: request.bindingMessage ?? null,\n\t\t\tclient_id: request.clientId,\n\t\t\tcreated_at_ms: request.createdAt,\n\t\t\texpires_at_ms: request.expiresAt,\n\t\t\tinterval_seconds: request.intervalSeconds,\n\t\t\tlast_polled_at_ms: request.lastPolledAt ?? null,\n\t\t\tscopes: request.scopes,\n\t\t\tstatus: request.status,\n\t\t\tuser_sub: request.userSub ?? null\n\t\t});\n\t},\n\tupdateStatus: async (authReqId, status, userSub) => {\n\t\tawait db\n\t\t\t.update(oauthBackchannelAuthRequestsTable)\n\t\t\t.set({ status, user_sub: userSub ?? null })\n\t\t\t.where(\n\t\t\t\teq(oauthBackchannelAuthRequestsTable.auth_req_id, authReqId)\n\t\t\t);\n\t}\n});\n",
22
- "import { and, eq } from 'drizzle-orm';\nimport {\n\tbigint,\n\tjsonb,\n\tpgTable,\n\tprimaryKey,\n\tvarchar\n} from 'drizzle-orm/pg-core';\nimport {\n\ttype AnyPgDatabase,\n\ttype PgQueryResultHKT,\n\ttype TablesRelationalConfig,\n\tcreateNeonDatabase\n} from '../stores/postgres';\nimport type {\n\tInvitationState,\n\tMembershipStatus,\n\tOrganization,\n\tOrganizationInvitation,\n\tOrganizationMembership,\n\tOrganizationStore\n} from './types';\n\nconst ID_LENGTH = 255;\nconst NAME_LENGTH = 255;\nconst STATE_LENGTH = 16;\n\nexport const organizationInvitationsTable = pgTable(\n\t'auth_organization_invitations',\n\t{\n\t\taccepted_at_ms: bigint('accepted_at_ms', { mode: 'number' }),\n\t\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\t\temail: varchar('email', { length: ID_LENGTH }).notNull(),\n\t\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\t\tinvitation_id: varchar('invitation_id', {\n\t\t\tlength: ID_LENGTH\n\t\t}).primaryKey(),\n\t\tinviter_user_id: varchar('inviter_user_id', { length: ID_LENGTH }),\n\t\torganization_id: varchar('organization_id', {\n\t\t\tlength: ID_LENGTH\n\t\t}).notNull(),\n\t\troles: jsonb('roles').$type<string[]>().notNull().default([]),\n\t\tstate: varchar('state', { length: STATE_LENGTH })\n\t\t\t.$type<InvitationState>()\n\t\t\t.notNull()\n\t\t\t.default('pending'),\n\t\ttoken_hash: varchar('token_hash', { length: ID_LENGTH })\n\t\t\t.notNull()\n\t\t\t.unique()\n\t}\n);\nexport const organizationMembershipsTable = pgTable(\n\t'auth_organization_memberships',\n\t{\n\t\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\t\torganization_id: varchar('organization_id', {\n\t\t\tlength: ID_LENGTH\n\t\t}).notNull(),\n\t\troles: jsonb('roles').$type<string[]>().notNull().default([]),\n\t\tstatus: varchar('status', { length: STATE_LENGTH })\n\t\t\t.$type<MembershipStatus>()\n\t\t\t.notNull()\n\t\t\t.default('active'),\n\t\tupdated_at_ms: bigint('updated_at_ms', { mode: 'number' }).notNull(),\n\t\tuser_id: varchar('user_id', { length: ID_LENGTH }).notNull()\n\t},\n\t(table) => [primaryKey({ columns: [table.organization_id, table.user_id] })]\n);\nexport const organizationsTable = pgTable('auth_organizations', {\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\tmetadata: jsonb('metadata').$type<Record<string, unknown>>(),\n\tname: varchar('name', { length: NAME_LENGTH }).notNull(),\n\torganization_id: varchar('organization_id', {\n\t\tlength: ID_LENGTH\n\t}).primaryKey(),\n\tupdated_at_ms: bigint('updated_at_ms', { mode: 'number' }).notNull()\n});\n\ntype OrganizationRow = typeof organizationsTable.$inferSelect;\ntype MembershipRow = typeof organizationMembershipsTable.$inferSelect;\ntype InvitationRow = typeof organizationInvitationsTable.$inferSelect;\ntype OrganizationInsert = typeof organizationsTable.$inferInsert;\ntype MembershipInsert = typeof organizationMembershipsTable.$inferInsert;\ntype InvitationInsert = typeof organizationInvitationsTable.$inferInsert;\n\nconst toOrganization = (row: OrganizationRow): Organization => ({\n\tcreatedAt: row.created_at_ms,\n\tmetadata: row.metadata ?? undefined,\n\tname: row.name,\n\torganizationId: row.organization_id,\n\tupdatedAt: row.updated_at_ms\n});\n\nconst toMembership = (row: MembershipRow): OrganizationMembership => ({\n\tcreatedAt: row.created_at_ms,\n\torganizationId: row.organization_id,\n\troles: row.roles,\n\tstatus: row.status,\n\tupdatedAt: row.updated_at_ms,\n\tuserId: row.user_id\n});\n\nconst toInvitation = (row: InvitationRow): OrganizationInvitation => ({\n\tacceptedAt: row.accepted_at_ms ?? undefined,\n\tcreatedAt: row.created_at_ms,\n\temail: row.email,\n\texpiresAt: row.expires_at_ms,\n\tinvitationId: row.invitation_id,\n\tinviterUserId: row.inviter_user_id ?? undefined,\n\torganizationId: row.organization_id,\n\troles: row.roles,\n\tstate: row.state,\n\ttokenHash: row.token_hash\n});\n\nexport const createNeonOrganizationStore = (databaseUrl: string) =>\n\tcreatePostgresOrganizationStore(createNeonDatabase(databaseUrl));\nexport const createPostgresOrganizationStore = <\n\tQ extends PgQueryResultHKT,\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig\n>(\n\tdb: AnyPgDatabase<Q, TFullSchema, TSchema>\n): OrganizationStore => ({\n\tdeleteOrganization: async (organizationId) => {\n\t\tawait db\n\t\t\t.delete(organizationsTable)\n\t\t\t.where(eq(organizationsTable.organization_id, organizationId));\n\t},\n\tgetInvitation: async (invitationId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(organizationInvitationsTable)\n\t\t\t.where(eq(organizationInvitationsTable.invitation_id, invitationId))\n\t\t\t.limit(1);\n\n\t\treturn row ? toInvitation(row) : undefined;\n\t},\n\tgetInvitationByTokenHash: async (tokenHash) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(organizationInvitationsTable)\n\t\t\t.where(eq(organizationInvitationsTable.token_hash, tokenHash))\n\t\t\t.limit(1);\n\n\t\treturn row ? toInvitation(row) : undefined;\n\t},\n\tgetMembership: async (organizationId, userId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(organizationMembershipsTable)\n\t\t\t.where(\n\t\t\t\tand(\n\t\t\t\t\teq(\n\t\t\t\t\t\torganizationMembershipsTable.organization_id,\n\t\t\t\t\t\torganizationId\n\t\t\t\t\t),\n\t\t\t\t\teq(organizationMembershipsTable.user_id, userId)\n\t\t\t\t)\n\t\t\t)\n\t\t\t.limit(1);\n\n\t\treturn row ? toMembership(row) : undefined;\n\t},\n\tgetOrganization: async (organizationId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(organizationsTable)\n\t\t\t.where(eq(organizationsTable.organization_id, organizationId))\n\t\t\t.limit(1);\n\n\t\treturn row ? toOrganization(row) : undefined;\n\t},\n\tlistInvitationsByOrganization: async (organizationId) => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(organizationInvitationsTable)\n\t\t\t.where(\n\t\t\t\teq(organizationInvitationsTable.organization_id, organizationId)\n\t\t\t);\n\n\t\treturn rows.map(toInvitation);\n\t},\n\tlistMembershipsByOrganization: async (organizationId) => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(organizationMembershipsTable)\n\t\t\t.where(\n\t\t\t\teq(organizationMembershipsTable.organization_id, organizationId)\n\t\t\t);\n\n\t\treturn rows.map(toMembership);\n\t},\n\tlistMembershipsByUser: async (userId) => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(organizationMembershipsTable)\n\t\t\t.where(eq(organizationMembershipsTable.user_id, userId));\n\n\t\treturn rows.map(toMembership);\n\t},\n\tremoveMembership: async (organizationId, userId) => {\n\t\tawait db\n\t\t\t.delete(organizationMembershipsTable)\n\t\t\t.where(\n\t\t\t\tand(\n\t\t\t\t\teq(\n\t\t\t\t\t\torganizationMembershipsTable.organization_id,\n\t\t\t\t\t\torganizationId\n\t\t\t\t\t),\n\t\t\t\t\teq(organizationMembershipsTable.user_id, userId)\n\t\t\t\t)\n\t\t\t);\n\t},\n\tsaveInvitation: async (invitation) => {\n\t\tconst values: InvitationInsert = {\n\t\t\taccepted_at_ms: invitation.acceptedAt ?? null,\n\t\t\tcreated_at_ms: invitation.createdAt,\n\t\t\temail: invitation.email,\n\t\t\texpires_at_ms: invitation.expiresAt,\n\t\t\tinvitation_id: invitation.invitationId,\n\t\t\tinviter_user_id: invitation.inviterUserId ?? null,\n\t\t\torganization_id: invitation.organizationId,\n\t\t\troles: invitation.roles,\n\t\t\tstate: invitation.state,\n\t\t\ttoken_hash: invitation.tokenHash\n\t\t};\n\t\tawait db\n\t\t\t.insert(organizationInvitationsTable)\n\t\t\t.values(values)\n\t\t\t.onConflictDoUpdate({\n\t\t\t\tset: values,\n\t\t\t\ttarget: organizationInvitationsTable.invitation_id\n\t\t\t});\n\t},\n\tsaveMembership: async (membership) => {\n\t\tconst values: MembershipInsert = {\n\t\t\tcreated_at_ms: membership.createdAt,\n\t\t\torganization_id: membership.organizationId,\n\t\t\troles: membership.roles,\n\t\t\tstatus: membership.status,\n\t\t\tupdated_at_ms: membership.updatedAt,\n\t\t\tuser_id: membership.userId\n\t\t};\n\t\tawait db\n\t\t\t.insert(organizationMembershipsTable)\n\t\t\t.values(values)\n\t\t\t.onConflictDoUpdate({\n\t\t\t\tset: values,\n\t\t\t\ttarget: [\n\t\t\t\t\torganizationMembershipsTable.organization_id,\n\t\t\t\t\torganizationMembershipsTable.user_id\n\t\t\t\t]\n\t\t\t});\n\t},\n\tsaveOrganization: async (organization) => {\n\t\tconst values: OrganizationInsert = {\n\t\t\tcreated_at_ms: organization.createdAt,\n\t\t\tmetadata: organization.metadata ?? null,\n\t\t\tname: organization.name,\n\t\t\torganization_id: organization.organizationId,\n\t\t\tupdated_at_ms: organization.updatedAt\n\t\t};\n\t\tawait db.insert(organizationsTable).values(values).onConflictDoUpdate({\n\t\t\tset: values,\n\t\t\ttarget: organizationsTable.organization_id\n\t\t});\n\t}\n});\n",
22
+ "import { and, eq } from 'drizzle-orm';\nimport {\n\tbigint,\n\tjsonb,\n\tpgTable,\n\tprimaryKey,\n\tvarchar\n} from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type {\n\tInvitationState,\n\tMembershipStatus,\n\tOrganization,\n\tOrganizationInvitation,\n\tOrganizationMembership,\n\tOrganizationStore\n} from './types';\n\nconst ID_LENGTH = 255;\nconst NAME_LENGTH = 255;\nconst STATE_LENGTH = 16;\n\nexport const organizationInvitationsTable = pgTable(\n\t'auth_organization_invitations',\n\t{\n\t\taccepted_at_ms: bigint('accepted_at_ms', { mode: 'number' }),\n\t\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\t\temail: varchar('email', { length: ID_LENGTH }).notNull(),\n\t\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\t\tinvitation_id: varchar('invitation_id', {\n\t\t\tlength: ID_LENGTH\n\t\t}).primaryKey(),\n\t\tinviter_user_id: varchar('inviter_user_id', { length: ID_LENGTH }),\n\t\torganization_id: varchar('organization_id', {\n\t\t\tlength: ID_LENGTH\n\t\t}).notNull(),\n\t\troles: jsonb('roles').$type<string[]>().notNull().default([]),\n\t\tstate: varchar('state', { length: STATE_LENGTH })\n\t\t\t.$type<InvitationState>()\n\t\t\t.notNull()\n\t\t\t.default('pending'),\n\t\ttoken_hash: varchar('token_hash', { length: ID_LENGTH })\n\t\t\t.notNull()\n\t\t\t.unique()\n\t}\n);\nexport const organizationMembershipsTable = pgTable(\n\t'auth_organization_memberships',\n\t{\n\t\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\t\torganization_id: varchar('organization_id', {\n\t\t\tlength: ID_LENGTH\n\t\t}).notNull(),\n\t\troles: jsonb('roles').$type<string[]>().notNull().default([]),\n\t\tstatus: varchar('status', { length: STATE_LENGTH })\n\t\t\t.$type<MembershipStatus>()\n\t\t\t.notNull()\n\t\t\t.default('active'),\n\t\tupdated_at_ms: bigint('updated_at_ms', { mode: 'number' }).notNull(),\n\t\tuser_id: varchar('user_id', { length: ID_LENGTH }).notNull()\n\t},\n\t(table) => [primaryKey({ columns: [table.organization_id, table.user_id] })]\n);\nexport const organizationsTable = pgTable('auth_organizations', {\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\tmetadata: jsonb('metadata').$type<Record<string, unknown>>(),\n\tname: varchar('name', { length: NAME_LENGTH }).notNull(),\n\torganization_id: varchar('organization_id', {\n\t\tlength: ID_LENGTH\n\t}).primaryKey(),\n\tupdated_at_ms: bigint('updated_at_ms', { mode: 'number' }).notNull()\n});\n\ntype OrganizationRow = typeof organizationsTable.$inferSelect;\ntype MembershipRow = typeof organizationMembershipsTable.$inferSelect;\ntype InvitationRow = typeof organizationInvitationsTable.$inferSelect;\ntype OrganizationInsert = typeof organizationsTable.$inferInsert;\ntype MembershipInsert = typeof organizationMembershipsTable.$inferInsert;\ntype InvitationInsert = typeof organizationInvitationsTable.$inferInsert;\n\nconst toOrganization = (row: OrganizationRow): Organization => ({\n\tcreatedAt: row.created_at_ms,\n\tmetadata: row.metadata ?? undefined,\n\tname: row.name,\n\torganizationId: row.organization_id,\n\tupdatedAt: row.updated_at_ms\n});\n\nconst toMembership = (row: MembershipRow): OrganizationMembership => ({\n\tcreatedAt: row.created_at_ms,\n\torganizationId: row.organization_id,\n\troles: row.roles,\n\tstatus: row.status,\n\tupdatedAt: row.updated_at_ms,\n\tuserId: row.user_id\n});\n\nconst toInvitation = (row: InvitationRow): OrganizationInvitation => ({\n\tacceptedAt: row.accepted_at_ms ?? undefined,\n\tcreatedAt: row.created_at_ms,\n\temail: row.email,\n\texpiresAt: row.expires_at_ms,\n\tinvitationId: row.invitation_id,\n\tinviterUserId: row.inviter_user_id ?? undefined,\n\torganizationId: row.organization_id,\n\troles: row.roles,\n\tstate: row.state,\n\ttokenHash: row.token_hash\n});\n\nexport const createNeonOrganizationStore = (databaseUrl: string) =>\n\tcreatePostgresOrganizationStore(createNeonDatabase(databaseUrl));\nexport const createPostgresOrganizationStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): OrganizationStore => ({\n\tdeleteOrganization: async (organizationId) => {\n\t\tawait db\n\t\t\t.delete(organizationsTable)\n\t\t\t.where(eq(organizationsTable.organization_id, organizationId));\n\t},\n\tgetInvitation: async (invitationId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(organizationInvitationsTable)\n\t\t\t.where(eq(organizationInvitationsTable.invitation_id, invitationId))\n\t\t\t.limit(1);\n\n\t\treturn row ? toInvitation(row) : undefined;\n\t},\n\tgetInvitationByTokenHash: async (tokenHash) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(organizationInvitationsTable)\n\t\t\t.where(eq(organizationInvitationsTable.token_hash, tokenHash))\n\t\t\t.limit(1);\n\n\t\treturn row ? toInvitation(row) : undefined;\n\t},\n\tgetMembership: async (organizationId, userId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(organizationMembershipsTable)\n\t\t\t.where(\n\t\t\t\tand(\n\t\t\t\t\teq(\n\t\t\t\t\t\torganizationMembershipsTable.organization_id,\n\t\t\t\t\t\torganizationId\n\t\t\t\t\t),\n\t\t\t\t\teq(organizationMembershipsTable.user_id, userId)\n\t\t\t\t)\n\t\t\t)\n\t\t\t.limit(1);\n\n\t\treturn row ? toMembership(row) : undefined;\n\t},\n\tgetOrganization: async (organizationId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(organizationsTable)\n\t\t\t.where(eq(organizationsTable.organization_id, organizationId))\n\t\t\t.limit(1);\n\n\t\treturn row ? toOrganization(row) : undefined;\n\t},\n\tlistInvitationsByOrganization: async (organizationId) => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(organizationInvitationsTable)\n\t\t\t.where(\n\t\t\t\teq(organizationInvitationsTable.organization_id, organizationId)\n\t\t\t);\n\n\t\treturn rows.map(toInvitation);\n\t},\n\tlistMembershipsByOrganization: async (organizationId) => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(organizationMembershipsTable)\n\t\t\t.where(\n\t\t\t\teq(organizationMembershipsTable.organization_id, organizationId)\n\t\t\t);\n\n\t\treturn rows.map(toMembership);\n\t},\n\tlistMembershipsByUser: async (userId) => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(organizationMembershipsTable)\n\t\t\t.where(eq(organizationMembershipsTable.user_id, userId));\n\n\t\treturn rows.map(toMembership);\n\t},\n\tremoveMembership: async (organizationId, userId) => {\n\t\tawait db\n\t\t\t.delete(organizationMembershipsTable)\n\t\t\t.where(\n\t\t\t\tand(\n\t\t\t\t\teq(\n\t\t\t\t\t\torganizationMembershipsTable.organization_id,\n\t\t\t\t\t\torganizationId\n\t\t\t\t\t),\n\t\t\t\t\teq(organizationMembershipsTable.user_id, userId)\n\t\t\t\t)\n\t\t\t);\n\t},\n\tsaveInvitation: async (invitation) => {\n\t\tconst values: InvitationInsert = {\n\t\t\taccepted_at_ms: invitation.acceptedAt ?? null,\n\t\t\tcreated_at_ms: invitation.createdAt,\n\t\t\temail: invitation.email,\n\t\t\texpires_at_ms: invitation.expiresAt,\n\t\t\tinvitation_id: invitation.invitationId,\n\t\t\tinviter_user_id: invitation.inviterUserId ?? null,\n\t\t\torganization_id: invitation.organizationId,\n\t\t\troles: invitation.roles,\n\t\t\tstate: invitation.state,\n\t\t\ttoken_hash: invitation.tokenHash\n\t\t};\n\t\tawait db\n\t\t\t.insert(organizationInvitationsTable)\n\t\t\t.values(values)\n\t\t\t.onConflictDoUpdate({\n\t\t\t\tset: values,\n\t\t\t\ttarget: organizationInvitationsTable.invitation_id\n\t\t\t});\n\t},\n\tsaveMembership: async (membership) => {\n\t\tconst values: MembershipInsert = {\n\t\t\tcreated_at_ms: membership.createdAt,\n\t\t\torganization_id: membership.organizationId,\n\t\t\troles: membership.roles,\n\t\t\tstatus: membership.status,\n\t\t\tupdated_at_ms: membership.updatedAt,\n\t\t\tuser_id: membership.userId\n\t\t};\n\t\tawait db\n\t\t\t.insert(organizationMembershipsTable)\n\t\t\t.values(values)\n\t\t\t.onConflictDoUpdate({\n\t\t\t\tset: values,\n\t\t\t\ttarget: [\n\t\t\t\t\torganizationMembershipsTable.organization_id,\n\t\t\t\t\torganizationMembershipsTable.user_id\n\t\t\t\t]\n\t\t\t});\n\t},\n\tsaveOrganization: async (organization) => {\n\t\tconst values: OrganizationInsert = {\n\t\t\tcreated_at_ms: organization.createdAt,\n\t\t\tmetadata: organization.metadata ?? null,\n\t\t\tname: organization.name,\n\t\t\torganization_id: organization.organizationId,\n\t\t\tupdated_at_ms: organization.updatedAt\n\t\t};\n\t\tawait db.insert(organizationsTable).values(values).onConflictDoUpdate({\n\t\t\tset: values,\n\t\t\ttarget: organizationsTable.organization_id\n\t\t});\n\t}\n});\n",
23
23
  "import { eq } from 'drizzle-orm';\nimport { bigint, pgTable, varchar } from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type { PasswordlessToken, PasswordlessTokenStore } from './types';\n\nconst ID_LENGTH = 255;\n\nexport const passwordlessTokensTable = pgTable('auth_passwordless_tokens', {\n\temail: varchar('email', { length: ID_LENGTH }).notNull(),\n\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\ttoken_hash: varchar('token_hash', { length: ID_LENGTH }).primaryKey()\n});\n\ntype PasswordlessRow = typeof passwordlessTokensTable.$inferSelect;\ntype PasswordlessInsert = typeof passwordlessTokensTable.$inferInsert;\n\nconst toToken = (row: PasswordlessRow): PasswordlessToken => ({\n\temail: row.email,\n\texpiresAt: row.expires_at_ms,\n\ttokenHash: row.token_hash\n});\n\nexport const createNeonPasswordlessTokenStore = (databaseUrl: string) =>\n\tcreatePostgresPasswordlessTokenStore(createNeonDatabase(databaseUrl));\nexport const createPostgresPasswordlessTokenStore = (\n\tdb: AnyPgDatabase\n): PasswordlessTokenStore => ({\n\tconsumeToken: async (tokenHash) => {\n\t\tconst [row] = await db\n\t\t\t.delete(passwordlessTokensTable)\n\t\t\t.where(eq(passwordlessTokensTable.token_hash, tokenHash))\n\t\t\t.returning();\n\n\t\treturn row ? toToken(row) : undefined;\n\t},\n\tsaveToken: async (token) => {\n\t\tconst values: PasswordlessInsert = {\n\t\t\temail: token.email,\n\t\t\texpires_at_ms: token.expiresAt,\n\t\t\ttoken_hash: token.tokenHash\n\t\t};\n\t\tawait db\n\t\t\t.insert(passwordlessTokensTable)\n\t\t\t.values(values)\n\t\t\t.onConflictDoUpdate({\n\t\t\t\tset: values,\n\t\t\t\ttarget: passwordlessTokensTable.token_hash\n\t\t\t});\n\t}\n});\n",
24
- "import { eq } from 'drizzle-orm';\nimport { bigint, jsonb, pgTable, varchar } from 'drizzle-orm/pg-core';\nimport {\n\ttype AnyPgDatabase,\n\ttype PgQueryResultHKT,\n\ttype TablesRelationalConfig,\n\tcreateNeonDatabase\n} from '../stores/postgres';\nimport type { SetupCapability, SetupSession, SetupSessionStore } from './types';\n\nconst ID_LENGTH = 255;\n\nexport const setupSessionsTable = pgTable('auth_setup_sessions', {\n\tcapabilities: jsonb('capabilities')\n\t\t.$type<SetupCapability[]>()\n\t\t.notNull()\n\t\t.default([]),\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\tcreated_by: varchar('created_by', { length: ID_LENGTH }),\n\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\torganization_id: varchar('organization_id', {\n\t\tlength: ID_LENGTH\n\t}).notNull(),\n\tsetup_session_id: varchar('setup_session_id', {\n\t\tlength: ID_LENGTH\n\t}).primaryKey(),\n\ttoken_hash: varchar('token_hash', { length: ID_LENGTH }).notNull().unique()\n});\n\ntype SetupRow = typeof setupSessionsTable.$inferSelect;\ntype SetupInsert = typeof setupSessionsTable.$inferInsert;\n\nconst toSession = (row: SetupRow): SetupSession => ({\n\tcapabilities: row.capabilities,\n\tcreatedAt: row.created_at_ms,\n\tcreatedBy: row.created_by ?? undefined,\n\texpiresAt: row.expires_at_ms,\n\torganizationId: row.organization_id,\n\tsetupSessionId: row.setup_session_id,\n\ttokenHash: row.token_hash\n});\n\nexport const createNeonSetupSessionStore = (databaseUrl: string) =>\n\tcreatePostgresSetupSessionStore(createNeonDatabase(databaseUrl));\nexport const createPostgresSetupSessionStore = <\n\tQ extends PgQueryResultHKT,\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig\n>(\n\tdb: AnyPgDatabase<Q, TFullSchema, TSchema>\n): SetupSessionStore => ({\n\tdeleteSetupSession: async (setupSessionId) => {\n\t\tawait db\n\t\t\t.delete(setupSessionsTable)\n\t\t\t.where(eq(setupSessionsTable.setup_session_id, setupSessionId));\n\t},\n\tgetSetupSessionByTokenHash: async (tokenHash) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(setupSessionsTable)\n\t\t\t.where(eq(setupSessionsTable.token_hash, tokenHash))\n\t\t\t.limit(1);\n\n\t\treturn row ? toSession(row) : undefined;\n\t},\n\tsaveSetupSession: async (session) => {\n\t\tconst values: SetupInsert = {\n\t\t\tcapabilities: session.capabilities,\n\t\t\tcreated_at_ms: session.createdAt,\n\t\t\tcreated_by: session.createdBy ?? null,\n\t\t\texpires_at_ms: session.expiresAt,\n\t\t\torganization_id: session.organizationId,\n\t\t\tsetup_session_id: session.setupSessionId,\n\t\t\ttoken_hash: session.tokenHash\n\t\t};\n\t\tawait db.insert(setupSessionsTable).values(values).onConflictDoUpdate({\n\t\t\tset: values,\n\t\t\ttarget: setupSessionsTable.setup_session_id\n\t\t});\n\t}\n});\n",
24
+ "import { eq } from 'drizzle-orm';\nimport { bigint, jsonb, pgTable, varchar } from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type { SetupCapability, SetupSession, SetupSessionStore } from './types';\n\nconst ID_LENGTH = 255;\n\nexport const setupSessionsTable = pgTable('auth_setup_sessions', {\n\tcapabilities: jsonb('capabilities')\n\t\t.$type<SetupCapability[]>()\n\t\t.notNull()\n\t\t.default([]),\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\tcreated_by: varchar('created_by', { length: ID_LENGTH }),\n\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\torganization_id: varchar('organization_id', {\n\t\tlength: ID_LENGTH\n\t}).notNull(),\n\tsetup_session_id: varchar('setup_session_id', {\n\t\tlength: ID_LENGTH\n\t}).primaryKey(),\n\ttoken_hash: varchar('token_hash', { length: ID_LENGTH }).notNull().unique()\n});\n\ntype SetupRow = typeof setupSessionsTable.$inferSelect;\ntype SetupInsert = typeof setupSessionsTable.$inferInsert;\n\nconst toSession = (row: SetupRow): SetupSession => ({\n\tcapabilities: row.capabilities,\n\tcreatedAt: row.created_at_ms,\n\tcreatedBy: row.created_by ?? undefined,\n\texpiresAt: row.expires_at_ms,\n\torganizationId: row.organization_id,\n\tsetupSessionId: row.setup_session_id,\n\ttokenHash: row.token_hash\n});\n\nexport const createNeonSetupSessionStore = (databaseUrl: string) =>\n\tcreatePostgresSetupSessionStore(createNeonDatabase(databaseUrl));\nexport const createPostgresSetupSessionStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): SetupSessionStore => ({\n\tdeleteSetupSession: async (setupSessionId) => {\n\t\tawait db\n\t\t\t.delete(setupSessionsTable)\n\t\t\t.where(eq(setupSessionsTable.setup_session_id, setupSessionId));\n\t},\n\tgetSetupSessionByTokenHash: async (tokenHash) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(setupSessionsTable)\n\t\t\t.where(eq(setupSessionsTable.token_hash, tokenHash))\n\t\t\t.limit(1);\n\n\t\treturn row ? toSession(row) : undefined;\n\t},\n\tsaveSetupSession: async (session) => {\n\t\tconst values: SetupInsert = {\n\t\t\tcapabilities: session.capabilities,\n\t\t\tcreated_at_ms: session.createdAt,\n\t\t\tcreated_by: session.createdBy ?? null,\n\t\t\texpires_at_ms: session.expiresAt,\n\t\t\torganization_id: session.organizationId,\n\t\t\tsetup_session_id: session.setupSessionId,\n\t\t\ttoken_hash: session.tokenHash\n\t\t};\n\t\tawait db.insert(setupSessionsTable).values(values).onConflictDoUpdate({\n\t\t\tset: values,\n\t\t\ttarget: setupSessionsTable.setup_session_id\n\t\t});\n\t}\n});\n",
25
25
  "import { and, eq } from 'drizzle-orm';\nimport {\n\tbigint,\n\tjsonb,\n\tpgTable,\n\tprimaryKey,\n\tvarchar\n} from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type { Role, RoleStore } from './types';\n\nconst ID_LENGTH = 255;\nconst SLUG_LENGTH = 128;\n// Global roles (no organizationId) live under the empty-string scope so the composite PK stays\n// NOT NULL (a real organizationId is never the empty string).\nconst GLOBAL_SCOPE = '';\n\nexport const rolesTable = pgTable(\n\t'auth_roles',\n\t{\n\t\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\t\torganization_id: varchar('organization_id', { length: ID_LENGTH })\n\t\t\t.notNull()\n\t\t\t.default(GLOBAL_SCOPE),\n\t\tpermissions: jsonb('permissions')\n\t\t\t.$type<string[]>()\n\t\t\t.notNull()\n\t\t\t.default([]),\n\t\tslug: varchar('slug', { length: SLUG_LENGTH }).notNull(),\n\t\tupdated_at_ms: bigint('updated_at_ms', { mode: 'number' }).notNull()\n\t},\n\t(table) => [primaryKey({ columns: [table.organization_id, table.slug] })]\n);\n\ntype RoleRow = typeof rolesTable.$inferSelect;\ntype RoleInsert = typeof rolesTable.$inferInsert;\n\nconst toRole = (row: RoleRow): Role => ({\n\tcreatedAt: row.created_at_ms,\n\torganizationId:\n\t\trow.organization_id === GLOBAL_SCOPE ? undefined : row.organization_id,\n\tpermissions: row.permissions,\n\tslug: row.slug,\n\tupdatedAt: row.updated_at_ms\n});\n\nexport const createNeonRoleStore = (databaseUrl: string) =>\n\tcreatePostgresRoleStore(createNeonDatabase(databaseUrl));\nexport const createPostgresRoleStore = (db: AnyPgDatabase): RoleStore => ({\n\tdeleteRole: async (slug, organizationId) => {\n\t\tawait db\n\t\t\t.delete(rolesTable)\n\t\t\t.where(\n\t\t\t\tand(\n\t\t\t\t\teq(\n\t\t\t\t\t\trolesTable.organization_id,\n\t\t\t\t\t\torganizationId ?? GLOBAL_SCOPE\n\t\t\t\t\t),\n\t\t\t\t\teq(rolesTable.slug, slug)\n\t\t\t\t)\n\t\t\t);\n\t},\n\tgetRole: async (slug, organizationId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(rolesTable)\n\t\t\t.where(\n\t\t\t\tand(\n\t\t\t\t\teq(\n\t\t\t\t\t\trolesTable.organization_id,\n\t\t\t\t\t\torganizationId ?? GLOBAL_SCOPE\n\t\t\t\t\t),\n\t\t\t\t\teq(rolesTable.slug, slug)\n\t\t\t\t)\n\t\t\t)\n\t\t\t.limit(1);\n\n\t\treturn row ? toRole(row) : undefined;\n\t},\n\tlistRoles: async (organizationId) => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(rolesTable)\n\t\t\t.where(\n\t\t\t\teq(rolesTable.organization_id, organizationId ?? GLOBAL_SCOPE)\n\t\t\t);\n\n\t\treturn rows.map(toRole);\n\t},\n\tsaveRole: async (role) => {\n\t\tconst values: RoleInsert = {\n\t\t\tcreated_at_ms: role.createdAt,\n\t\t\torganization_id: role.organizationId ?? GLOBAL_SCOPE,\n\t\t\tpermissions: role.permissions,\n\t\t\tslug: role.slug,\n\t\t\tupdated_at_ms: role.updatedAt\n\t\t};\n\t\tawait db\n\t\t\t.insert(rolesTable)\n\t\t\t.values(values)\n\t\t\t.onConflictDoUpdate({\n\t\t\t\tset: values,\n\t\t\t\ttarget: [rolesTable.organization_id, rolesTable.slug]\n\t\t\t});\n\t}\n});\n",
26
- "import { desc, eq } from 'drizzle-orm';\nimport { bigint, pgTable, varchar } from 'drizzle-orm/pg-core';\nimport {\n\ttype AnyPgDatabase,\n\ttype PgQueryResultHKT,\n\ttype TablesRelationalConfig,\n\tcreateNeonDatabase\n} from '../stores/postgres';\nimport type { ScimToken, ScimTokenStore } from './types';\n\nconst ID_LENGTH = 255;\n\nexport const scimTokensTable = pgTable('auth_scim_tokens', {\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\thashed_token: varchar('hashed_token', { length: ID_LENGTH }).notNull(),\n\tlast_used_at_ms: bigint('last_used_at_ms', { mode: 'number' }),\n\torganization_id: varchar('organization_id', {\n\t\tlength: ID_LENGTH\n\t}).notNull(),\n\ttoken_id: varchar('token_id', { length: ID_LENGTH }).primaryKey()\n});\n\ntype ScimTokenRow = typeof scimTokensTable.$inferSelect;\ntype ScimTokenInsert = typeof scimTokensTable.$inferInsert;\n\nconst toToken = (row: ScimTokenRow): ScimToken => ({\n\tcreatedAt: row.created_at_ms,\n\thashedToken: row.hashed_token,\n\tlastUsedAt: row.last_used_at_ms ?? undefined,\n\torganizationId: row.organization_id,\n\ttokenId: row.token_id\n});\n\nconst toValues = (token: ScimToken): ScimTokenInsert => ({\n\tcreated_at_ms: token.createdAt,\n\thashed_token: token.hashedToken,\n\tlast_used_at_ms: token.lastUsedAt ?? null,\n\torganization_id: token.organizationId,\n\ttoken_id: token.tokenId\n});\n\nexport const createNeonScimTokenStore = (databaseUrl: string) =>\n\tcreatePostgresScimTokenStore(createNeonDatabase(databaseUrl));\n\nexport const createPostgresScimTokenStore = <\n\tQ extends PgQueryResultHKT,\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig\n>(\n\tdb: AnyPgDatabase<Q, TFullSchema, TSchema>\n): ScimTokenStore => ({\n\tdeleteToken: async (tokenId) => {\n\t\tawait db\n\t\t\t.delete(scimTokensTable)\n\t\t\t.where(eq(scimTokensTable.token_id, tokenId));\n\t},\n\tfindByHashedToken: async (hashedToken) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(scimTokensTable)\n\t\t\t.where(eq(scimTokensTable.hashed_token, hashedToken))\n\t\t\t.limit(1);\n\n\t\treturn row ? toToken(row) : undefined;\n\t},\n\tlistTokens: async (organizationId) => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(scimTokensTable)\n\t\t\t.where(eq(scimTokensTable.organization_id, organizationId))\n\t\t\t.orderBy(desc(scimTokensTable.created_at_ms));\n\n\t\treturn rows.map(toToken);\n\t},\n\tsaveToken: async (token) => {\n\t\tconst values = toValues(token);\n\t\tawait db.insert(scimTokensTable).values(values).onConflictDoUpdate({\n\t\t\tset: values,\n\t\t\ttarget: scimTokensTable.token_id\n\t\t});\n\t}\n});\n",
26
+ "import { desc, eq } from 'drizzle-orm';\nimport { bigint, pgTable, varchar } from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type { ScimToken, ScimTokenStore } from './types';\n\nconst ID_LENGTH = 255;\n\nexport const scimTokensTable = pgTable('auth_scim_tokens', {\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\thashed_token: varchar('hashed_token', { length: ID_LENGTH }).notNull(),\n\tlast_used_at_ms: bigint('last_used_at_ms', { mode: 'number' }),\n\torganization_id: varchar('organization_id', {\n\t\tlength: ID_LENGTH\n\t}).notNull(),\n\ttoken_id: varchar('token_id', { length: ID_LENGTH }).primaryKey()\n});\n\ntype ScimTokenRow = typeof scimTokensTable.$inferSelect;\ntype ScimTokenInsert = typeof scimTokensTable.$inferInsert;\n\nconst toToken = (row: ScimTokenRow): ScimToken => ({\n\tcreatedAt: row.created_at_ms,\n\thashedToken: row.hashed_token,\n\tlastUsedAt: row.last_used_at_ms ?? undefined,\n\torganizationId: row.organization_id,\n\ttokenId: row.token_id\n});\n\nconst toValues = (token: ScimToken): ScimTokenInsert => ({\n\tcreated_at_ms: token.createdAt,\n\thashed_token: token.hashedToken,\n\tlast_used_at_ms: token.lastUsedAt ?? null,\n\torganization_id: token.organizationId,\n\ttoken_id: token.tokenId\n});\n\nexport const createNeonScimTokenStore = (databaseUrl: string) =>\n\tcreatePostgresScimTokenStore(createNeonDatabase(databaseUrl));\n\nexport const createPostgresScimTokenStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): ScimTokenStore => ({\n\tdeleteToken: async (tokenId) => {\n\t\tawait db\n\t\t\t.delete(scimTokensTable)\n\t\t\t.where(eq(scimTokensTable.token_id, tokenId));\n\t},\n\tfindByHashedToken: async (hashedToken) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(scimTokensTable)\n\t\t\t.where(eq(scimTokensTable.hashed_token, hashedToken))\n\t\t\t.limit(1);\n\n\t\treturn row ? toToken(row) : undefined;\n\t},\n\tlistTokens: async (organizationId) => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(scimTokensTable)\n\t\t\t.where(eq(scimTokensTable.organization_id, organizationId))\n\t\t\t.orderBy(desc(scimTokensTable.created_at_ms));\n\n\t\treturn rows.map(toToken);\n\t},\n\tsaveToken: async (token) => {\n\t\tconst values = toValues(token);\n\t\tawait db.insert(scimTokensTable).values(values).onConflictDoUpdate({\n\t\t\tset: values,\n\t\t\ttarget: scimTokensTable.token_id\n\t\t});\n\t}\n});\n",
27
27
  "import { neon } from '@neondatabase/serverless';\nimport { eq } from 'drizzle-orm';\nimport { drizzle, NeonHttpDatabase } from 'drizzle-orm/neon-http';\nimport {\n\ttype AnyPgTable,\n\tbigint,\n\tjsonb,\n\tpgTable,\n\ttext,\n\ttimestamp,\n\tvarchar\n} from 'drizzle-orm/pg-core';\nimport { isUserSessionId } from '../typeGuards';\nimport type { SessionData, UnregisteredSessionData } from '../types';\nimport type { AuthSessionStore } from './types';\n\nexport const authSessionsTable = pgTable('auth_sessions', {\n\taccess_token: text('access_token'),\n\tauthenticated_at_ms: bigint('authenticated_at_ms', { mode: 'number' }),\n\tcreated_at: timestamp('created_at').notNull().defaultNow(),\n\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\tid: varchar('id', { length: 255 }).primaryKey(),\n\trefresh_token: text('refresh_token'),\n\tupdated_at: timestamp('updated_at').notNull().defaultNow(),\n\tuser_json: jsonb('user_json').$type<Record<string, unknown>>().notNull()\n});\n\nexport const authUnregisteredSessionsTable = pgTable(\n\t'auth_unregistered_sessions',\n\t{\n\t\taccess_token: text('access_token'),\n\t\tcreated_at: timestamp('created_at').notNull().defaultNow(),\n\t\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\t\tid: varchar('id', { length: 255 }).primaryKey(),\n\t\trefresh_token: text('refresh_token'),\n\t\tsession_information_json: jsonb('session_information_json').$type<\n\t\t\tRecord<string, unknown>\n\t\t>(),\n\t\tupdated_at: timestamp('updated_at').notNull().defaultNow(),\n\t\tuser_identity_json:\n\t\t\tjsonb('user_identity_json').$type<Record<string, unknown>>()\n\t}\n);\n\nexport const authSessionSchema = {\n\tauthSessions: authSessionsTable,\n\tauthUnregisteredSessions: authUnregisteredSessionsTable\n} satisfies Record<string, AnyPgTable>;\n\nexport type AuthSessionSchema = typeof authSessionSchema;\n\ntype AuthSessionRow = typeof authSessionsTable.$inferSelect;\ntype AuthUnregisteredSessionRow =\n\ttypeof authUnregisteredSessionsTable.$inferSelect;\n\nconst cloneUser = <UserType>(value: UserType) => {\n\tif (value === null || value === undefined) return value;\n\n\treturn structuredClone(value);\n};\n\nconst cloneRecord = (value?: Record<string, unknown>) =>\n\tvalue ? structuredClone(value) : undefined;\n\nconst toSessionData = <UserType>(\n\trow: AuthSessionRow\n): SessionData<UserType> => ({\n\taccessToken: row.access_token ?? undefined,\n\tauthenticatedAt: row.authenticated_at_ms ?? undefined,\n\texpiresAt: row.expires_at_ms,\n\trefreshToken: row.refresh_token ?? undefined,\n\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- deserialization boundary: user_json was persisted from UserType, so reading it back as UserType is sound\n\tuser: cloneUser(row.user_json as UserType)\n});\n\nconst toUnregisteredSessionData = (\n\trow: AuthUnregisteredSessionRow\n): UnregisteredSessionData => ({\n\taccessToken: row.access_token ?? undefined,\n\texpiresAt: row.expires_at_ms,\n\trefreshToken: row.refresh_token ?? undefined,\n\tsessionInformation: cloneRecord(row.session_information_json ?? undefined),\n\tuserIdentity: cloneRecord(row.user_identity_json ?? undefined)\n});\n\nexport const createNeonAuthSessionStore = <UserType>(\n\tdatabaseUrl: string\n): AuthSessionStore<UserType> => {\n\tconst sql = neon(databaseUrl);\n\tconst db: NeonHttpDatabase<AuthSessionSchema> = drizzle(sql, {\n\t\tschema: authSessionSchema\n\t});\n\n\treturn {\n\t\tgetSession: async (id) => {\n\t\t\tconst [row] = await db\n\t\t\t\t.select()\n\t\t\t\t.from(authSessionsTable)\n\t\t\t\t.where(eq(authSessionsTable.id, id))\n\t\t\t\t.limit(1);\n\n\t\t\treturn row ? toSessionData<UserType>(row) : undefined;\n\t\t},\n\t\tgetUnregisteredSession: async (id) => {\n\t\t\tconst [row] = await db\n\t\t\t\t.select()\n\t\t\t\t.from(authUnregisteredSessionsTable)\n\t\t\t\t.where(eq(authUnregisteredSessionsTable.id, id))\n\t\t\t\t.limit(1);\n\n\t\t\treturn row ? toUnregisteredSessionData(row) : undefined;\n\t\t},\n\t\tlistSessionIds: async () => {\n\t\t\tconst rows = await db\n\t\t\t\t.select({ id: authSessionsTable.id })\n\t\t\t\t.from(authSessionsTable);\n\n\t\t\treturn rows.map((row) => row.id).filter(isUserSessionId);\n\t\t},\n\t\tlistUnregisteredSessionIds: async () => {\n\t\t\tconst rows = await db\n\t\t\t\t.select({ id: authUnregisteredSessionsTable.id })\n\t\t\t\t.from(authUnregisteredSessionsTable);\n\n\t\t\treturn rows.map((row) => row.id).filter(isUserSessionId);\n\t\t},\n\t\tremoveSession: async (id) => {\n\t\t\tawait db\n\t\t\t\t.delete(authSessionsTable)\n\t\t\t\t.where(eq(authSessionsTable.id, id));\n\t\t},\n\t\tremoveUnregisteredSession: async (id) => {\n\t\t\tawait db\n\t\t\t\t.delete(authUnregisteredSessionsTable)\n\t\t\t\t.where(eq(authUnregisteredSessionsTable.id, id));\n\t\t},\n\t\tsetSession: async (id, value) => {\n\t\t\tawait db\n\t\t\t\t.insert(authSessionsTable)\n\t\t\t\t.values({\n\t\t\t\t\taccess_token: value.accessToken ?? null,\n\t\t\t\t\tauthenticated_at_ms: value.authenticatedAt ?? null,\n\t\t\t\t\texpires_at_ms: value.expiresAt,\n\t\t\t\t\tid,\n\t\t\t\t\trefresh_token: value.refreshToken ?? null,\n\t\t\t\t\tupdated_at: new Date(),\n\t\t\t\t\tuser_json: value.user ?? {}\n\t\t\t\t})\n\t\t\t\t.onConflictDoUpdate({\n\t\t\t\t\tset: {\n\t\t\t\t\t\taccess_token: value.accessToken ?? null,\n\t\t\t\t\t\tauthenticated_at_ms: value.authenticatedAt ?? null,\n\t\t\t\t\t\texpires_at_ms: value.expiresAt,\n\t\t\t\t\t\trefresh_token: value.refreshToken ?? null,\n\t\t\t\t\t\tupdated_at: new Date(),\n\t\t\t\t\t\tuser_json: value.user ?? {}\n\t\t\t\t\t},\n\t\t\t\t\ttarget: authSessionsTable.id\n\t\t\t\t});\n\t\t},\n\t\tsetUnregisteredSession: async (id, value) => {\n\t\t\tawait db\n\t\t\t\t.insert(authUnregisteredSessionsTable)\n\t\t\t\t.values({\n\t\t\t\t\taccess_token: value.accessToken ?? null,\n\t\t\t\t\texpires_at_ms: value.expiresAt,\n\t\t\t\t\tid,\n\t\t\t\t\trefresh_token: value.refreshToken ?? null,\n\t\t\t\t\tsession_information_json: value.sessionInformation ?? null,\n\t\t\t\t\tupdated_at: new Date(),\n\t\t\t\t\tuser_identity_json: value.userIdentity ?? null\n\t\t\t\t})\n\t\t\t\t.onConflictDoUpdate({\n\t\t\t\t\tset: {\n\t\t\t\t\t\taccess_token: value.accessToken ?? null,\n\t\t\t\t\t\texpires_at_ms: value.expiresAt,\n\t\t\t\t\t\trefresh_token: value.refreshToken ?? null,\n\t\t\t\t\t\tsession_information_json:\n\t\t\t\t\t\t\tvalue.sessionInformation ?? null,\n\t\t\t\t\t\tupdated_at: new Date(),\n\t\t\t\t\t\tuser_identity_json: value.userIdentity ?? null\n\t\t\t\t\t},\n\t\t\t\t\ttarget: authUnregisteredSessionsTable.id\n\t\t\t\t});\n\t\t}\n\t};\n};\n",
28
28
  "import { eq } from 'drizzle-orm';\nimport { bigint, pgTable, text, varchar } from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type { SamlServiceProvider, SamlServiceProviderStore } from './types';\n\nconst ID_LENGTH = 255;\nconst URL_LENGTH = 2048;\n\nexport const samlServiceProvidersTable = pgTable(\n\t'auth_saml_service_providers',\n\t{\n\t\tacs_url: varchar('acs_url', { length: URL_LENGTH }).notNull(),\n\t\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\t\tentity_id: varchar('entity_id', { length: URL_LENGTH }).primaryKey(),\n\t\tname_id_format: varchar('name_id_format', { length: ID_LENGTH }),\n\t\tsigning_cert: text('signing_cert'),\n\t\tupdated_at_ms: bigint('updated_at_ms', { mode: 'number' }).notNull()\n\t}\n);\n\ntype Row = typeof samlServiceProvidersTable.$inferSelect;\n\nconst toServiceProvider = (row: Row): SamlServiceProvider => ({\n\tacsUrl: row.acs_url,\n\tcreatedAt: row.created_at_ms,\n\tentityId: row.entity_id,\n\tnameIdFormat: row.name_id_format ?? undefined,\n\tsigningCert: row.signing_cert ?? undefined,\n\tupdatedAt: row.updated_at_ms\n});\n\nconst toValues = (\n\tserviceProvider: SamlServiceProvider\n): typeof samlServiceProvidersTable.$inferInsert => ({\n\tacs_url: serviceProvider.acsUrl,\n\tcreated_at_ms: serviceProvider.createdAt,\n\tentity_id: serviceProvider.entityId,\n\tname_id_format: serviceProvider.nameIdFormat ?? null,\n\tsigning_cert: serviceProvider.signingCert ?? null,\n\tupdated_at_ms: serviceProvider.updatedAt\n});\n\nexport const createNeonSamlServiceProviderStore = (databaseUrl: string) =>\n\tcreatePostgresSamlServiceProviderStore(createNeonDatabase(databaseUrl));\n\nexport const createPostgresSamlServiceProviderStore = (\n\tdb: AnyPgDatabase\n): SamlServiceProviderStore => ({\n\tdeleteServiceProvider: async (entityId) => {\n\t\tawait db\n\t\t\t.delete(samlServiceProvidersTable)\n\t\t\t.where(eq(samlServiceProvidersTable.entity_id, entityId));\n\t},\n\tfindServiceProvider: async (entityId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(samlServiceProvidersTable)\n\t\t\t.where(eq(samlServiceProvidersTable.entity_id, entityId))\n\t\t\t.limit(1);\n\n\t\treturn row === undefined ? undefined : toServiceProvider(row);\n\t},\n\tlistServiceProviders: async () => {\n\t\tconst rows = await db.select().from(samlServiceProvidersTable);\n\n\t\treturn rows.map(toServiceProvider);\n\t},\n\tsaveServiceProvider: async (serviceProvider) => {\n\t\tawait db\n\t\t\t.insert(samlServiceProvidersTable)\n\t\t\t.values(toValues(serviceProvider))\n\t\t\t.onConflictDoUpdate({\n\t\t\t\tset: toValues(serviceProvider),\n\t\t\t\ttarget: samlServiceProvidersTable.entity_id\n\t\t\t});\n\t}\n});\n",
29
- "import { and, desc, eq } from 'drizzle-orm';\nimport { bigint, boolean, jsonb, pgTable, varchar } from 'drizzle-orm/pg-core';\nimport {\n\ttype AnyPgDatabase,\n\ttype PgQueryResultHKT,\n\ttype TablesRelationalConfig,\n\tcreateNeonDatabase\n} from '../stores/postgres';\nimport type {\n\tOidcConnection,\n\tOidcConnectionConfig,\n\tSamlConnection,\n\tSamlConnectionConfig,\n\tSSOConnection,\n\tSSOConnectionStore,\n\tSSOConnectionType\n} from './types';\n\nconst ID_LENGTH = 255;\nconst TYPE_LENGTH = 16;\n\nexport const ssoConnectionsTable = pgTable('auth_sso_connections', {\n\tconfig: jsonb('config')\n\t\t.$type<OidcConnectionConfig | SamlConnectionConfig>()\n\t\t.notNull(),\n\tconnection_id: varchar('connection_id', { length: ID_LENGTH }).primaryKey(),\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\tenabled: boolean('enabled').notNull().default(true),\n\torganization_id: varchar('organization_id', {\n\t\tlength: ID_LENGTH\n\t}).notNull(),\n\ttype: varchar('type', { length: TYPE_LENGTH })\n\t\t.$type<SSOConnectionType>()\n\t\t.notNull(),\n\tupdated_at_ms: bigint('updated_at_ms', { mode: 'number' }).notNull()\n});\n\ntype SsoRow = typeof ssoConnectionsTable.$inferSelect;\ntype SsoInsert = typeof ssoConnectionsTable.$inferInsert;\n\nconst toStringArray = (value: unknown) =>\n\tArray.isArray(value)\n\t\t? value.filter((entry): entry is string => typeof entry === 'string')\n\t\t: [];\n\n// Validate the jsonb payload back into the typed config — never trust the column blindly\n// (and never `as`-cast it). Returns undefined for a malformed row.\nconst toOidcConfig = (value: object): OidcConnectionConfig | undefined => {\n\tconst clientId = Reflect.get(value, 'clientId');\n\tconst clientSecret = Reflect.get(value, 'clientSecret');\n\tconst issuer = Reflect.get(value, 'issuer');\n\tconst redirectUri = Reflect.get(value, 'redirectUri');\n\tif (\n\t\ttypeof clientId !== 'string' ||\n\t\ttypeof clientSecret !== 'string' ||\n\t\ttypeof issuer !== 'string' ||\n\t\ttypeof redirectUri !== 'string'\n\t) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\tclientId,\n\t\tclientSecret,\n\t\tissuer,\n\t\tredirectUri,\n\t\tscopes: toStringArray(Reflect.get(value, 'scopes'))\n\t};\n};\n\nconst toSamlConfig = (value: object): SamlConnectionConfig | undefined => {\n\tconst idpEntityId = Reflect.get(value, 'idpEntityId');\n\tconst idpSsoUrl = Reflect.get(value, 'idpSsoUrl');\n\tconst idpX509Cert = Reflect.get(value, 'idpX509Cert');\n\tif (\n\t\ttypeof idpEntityId !== 'string' ||\n\t\ttypeof idpSsoUrl !== 'string' ||\n\t\ttypeof idpX509Cert !== 'string'\n\t) {\n\t\treturn undefined;\n\t}\n\n\tconst idpSloUrl = Reflect.get(value, 'idpSloUrl');\n\n\treturn {\n\t\tidpEntityId,\n\t\tidpSloUrl: typeof idpSloUrl === 'string' ? idpSloUrl : undefined,\n\t\tidpSsoUrl,\n\t\tidpX509Cert\n\t};\n};\n\nconst toConnection = (row: SsoRow) => {\n\tif (row.type === 'oidc') {\n\t\tconst config = toOidcConfig(row.config);\n\t\tif (config === undefined) return undefined;\n\n\t\tconst connection: OidcConnection = {\n\t\t\tconfig,\n\t\t\tconnectionId: row.connection_id,\n\t\t\tcreatedAt: row.created_at_ms,\n\t\t\tenabled: row.enabled,\n\t\t\torganizationId: row.organization_id,\n\t\t\ttype: 'oidc',\n\t\t\tupdatedAt: row.updated_at_ms\n\t\t};\n\n\t\treturn connection;\n\t}\n\n\tconst config = toSamlConfig(row.config);\n\tif (config === undefined) return undefined;\n\n\tconst connection: SamlConnection = {\n\t\tconfig,\n\t\tconnectionId: row.connection_id,\n\t\tcreatedAt: row.created_at_ms,\n\t\tenabled: row.enabled,\n\t\torganizationId: row.organization_id,\n\t\ttype: 'saml',\n\t\tupdatedAt: row.updated_at_ms\n\t};\n\n\treturn connection;\n};\n\nconst toValues = (connection: SSOConnection): SsoInsert => ({\n\tconfig: connection.config,\n\tconnection_id: connection.connectionId,\n\tcreated_at_ms: connection.createdAt,\n\tenabled: connection.enabled,\n\torganization_id: connection.organizationId,\n\ttype: connection.type,\n\tupdated_at_ms: connection.updatedAt\n});\n\nexport const createNeonSsoConnectionStore = (databaseUrl: string) =>\n\tcreatePostgresSsoConnectionStore(createNeonDatabase(databaseUrl));\n\nexport const createPostgresSsoConnectionStore = <\n\tQ extends PgQueryResultHKT,\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig\n>(\n\tdb: AnyPgDatabase<Q, TFullSchema, TSchema>\n): SSOConnectionStore => ({\n\tdeleteConnection: async (connectionId) => {\n\t\tawait db\n\t\t\t.delete(ssoConnectionsTable)\n\t\t\t.where(eq(ssoConnectionsTable.connection_id, connectionId));\n\t},\n\tgetConnection: async (connectionId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(ssoConnectionsTable)\n\t\t\t.where(eq(ssoConnectionsTable.connection_id, connectionId))\n\t\t\t.limit(1);\n\n\t\treturn row ? toConnection(row) : undefined;\n\t},\n\tgetConnectionByOrganization: async (organizationId, type) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(ssoConnectionsTable)\n\t\t\t.where(\n\t\t\t\tand(\n\t\t\t\t\teq(ssoConnectionsTable.organization_id, organizationId),\n\t\t\t\t\teq(ssoConnectionsTable.enabled, true),\n\t\t\t\t\ttype === undefined\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: eq(ssoConnectionsTable.type, type)\n\t\t\t\t)\n\t\t\t)\n\t\t\t.orderBy(desc(ssoConnectionsTable.updated_at_ms))\n\t\t\t.limit(1);\n\n\t\treturn row ? toConnection(row) : undefined;\n\t},\n\tlistConnectionsByOrganization: async (organizationId) => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(ssoConnectionsTable)\n\t\t\t.where(eq(ssoConnectionsTable.organization_id, organizationId))\n\t\t\t.orderBy(desc(ssoConnectionsTable.updated_at_ms));\n\n\t\treturn rows.flatMap((row) => {\n\t\t\tconst connection = toConnection(row);\n\n\t\t\treturn connection === undefined ? [] : [connection];\n\t\t});\n\t},\n\tsaveConnection: async (connection) => {\n\t\tconst values = toValues(connection);\n\t\tawait db.insert(ssoConnectionsTable).values(values).onConflictDoUpdate({\n\t\t\tset: values,\n\t\t\ttarget: ssoConnectionsTable.connection_id\n\t\t});\n\t}\n});\n",
29
+ "import { and, desc, eq } from 'drizzle-orm';\nimport { bigint, boolean, jsonb, pgTable, varchar } from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type {\n\tOidcConnection,\n\tOidcConnectionConfig,\n\tSamlConnection,\n\tSamlConnectionConfig,\n\tSSOConnection,\n\tSSOConnectionStore,\n\tSSOConnectionType\n} from './types';\n\nconst ID_LENGTH = 255;\nconst TYPE_LENGTH = 16;\n\nexport const ssoConnectionsTable = pgTable('auth_sso_connections', {\n\tconfig: jsonb('config')\n\t\t.$type<OidcConnectionConfig | SamlConnectionConfig>()\n\t\t.notNull(),\n\tconnection_id: varchar('connection_id', { length: ID_LENGTH }).primaryKey(),\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\tenabled: boolean('enabled').notNull().default(true),\n\torganization_id: varchar('organization_id', {\n\t\tlength: ID_LENGTH\n\t}).notNull(),\n\ttype: varchar('type', { length: TYPE_LENGTH })\n\t\t.$type<SSOConnectionType>()\n\t\t.notNull(),\n\tupdated_at_ms: bigint('updated_at_ms', { mode: 'number' }).notNull()\n});\n\ntype SsoRow = typeof ssoConnectionsTable.$inferSelect;\ntype SsoInsert = typeof ssoConnectionsTable.$inferInsert;\n\nconst toStringArray = (value: unknown) =>\n\tArray.isArray(value)\n\t\t? value.filter((entry): entry is string => typeof entry === 'string')\n\t\t: [];\n\n// Validate the jsonb payload back into the typed config — never trust the column blindly\n// (and never `as`-cast it). Returns undefined for a malformed row.\nconst toOidcConfig = (value: object): OidcConnectionConfig | undefined => {\n\tconst clientId = Reflect.get(value, 'clientId');\n\tconst clientSecret = Reflect.get(value, 'clientSecret');\n\tconst issuer = Reflect.get(value, 'issuer');\n\tconst redirectUri = Reflect.get(value, 'redirectUri');\n\tif (\n\t\ttypeof clientId !== 'string' ||\n\t\ttypeof clientSecret !== 'string' ||\n\t\ttypeof issuer !== 'string' ||\n\t\ttypeof redirectUri !== 'string'\n\t) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\tclientId,\n\t\tclientSecret,\n\t\tissuer,\n\t\tredirectUri,\n\t\tscopes: toStringArray(Reflect.get(value, 'scopes'))\n\t};\n};\n\nconst toSamlConfig = (value: object): SamlConnectionConfig | undefined => {\n\tconst idpEntityId = Reflect.get(value, 'idpEntityId');\n\tconst idpSsoUrl = Reflect.get(value, 'idpSsoUrl');\n\tconst idpX509Cert = Reflect.get(value, 'idpX509Cert');\n\tif (\n\t\ttypeof idpEntityId !== 'string' ||\n\t\ttypeof idpSsoUrl !== 'string' ||\n\t\ttypeof idpX509Cert !== 'string'\n\t) {\n\t\treturn undefined;\n\t}\n\n\tconst idpSloUrl = Reflect.get(value, 'idpSloUrl');\n\n\treturn {\n\t\tidpEntityId,\n\t\tidpSloUrl: typeof idpSloUrl === 'string' ? idpSloUrl : undefined,\n\t\tidpSsoUrl,\n\t\tidpX509Cert\n\t};\n};\n\nconst toConnection = (row: SsoRow) => {\n\tif (row.type === 'oidc') {\n\t\tconst config = toOidcConfig(row.config);\n\t\tif (config === undefined) return undefined;\n\n\t\tconst connection: OidcConnection = {\n\t\t\tconfig,\n\t\t\tconnectionId: row.connection_id,\n\t\t\tcreatedAt: row.created_at_ms,\n\t\t\tenabled: row.enabled,\n\t\t\torganizationId: row.organization_id,\n\t\t\ttype: 'oidc',\n\t\t\tupdatedAt: row.updated_at_ms\n\t\t};\n\n\t\treturn connection;\n\t}\n\n\tconst config = toSamlConfig(row.config);\n\tif (config === undefined) return undefined;\n\n\tconst connection: SamlConnection = {\n\t\tconfig,\n\t\tconnectionId: row.connection_id,\n\t\tcreatedAt: row.created_at_ms,\n\t\tenabled: row.enabled,\n\t\torganizationId: row.organization_id,\n\t\ttype: 'saml',\n\t\tupdatedAt: row.updated_at_ms\n\t};\n\n\treturn connection;\n};\n\nconst toValues = (connection: SSOConnection): SsoInsert => ({\n\tconfig: connection.config,\n\tconnection_id: connection.connectionId,\n\tcreated_at_ms: connection.createdAt,\n\tenabled: connection.enabled,\n\torganization_id: connection.organizationId,\n\ttype: connection.type,\n\tupdated_at_ms: connection.updatedAt\n});\n\nexport const createNeonSsoConnectionStore = (databaseUrl: string) =>\n\tcreatePostgresSsoConnectionStore(createNeonDatabase(databaseUrl));\n\nexport const createPostgresSsoConnectionStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): SSOConnectionStore => ({\n\tdeleteConnection: async (connectionId) => {\n\t\tawait db\n\t\t\t.delete(ssoConnectionsTable)\n\t\t\t.where(eq(ssoConnectionsTable.connection_id, connectionId));\n\t},\n\tgetConnection: async (connectionId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(ssoConnectionsTable)\n\t\t\t.where(eq(ssoConnectionsTable.connection_id, connectionId))\n\t\t\t.limit(1);\n\n\t\treturn row ? toConnection(row) : undefined;\n\t},\n\tgetConnectionByOrganization: async (organizationId, type) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(ssoConnectionsTable)\n\t\t\t.where(\n\t\t\t\tand(\n\t\t\t\t\teq(ssoConnectionsTable.organization_id, organizationId),\n\t\t\t\t\teq(ssoConnectionsTable.enabled, true),\n\t\t\t\t\ttype === undefined\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: eq(ssoConnectionsTable.type, type)\n\t\t\t\t)\n\t\t\t)\n\t\t\t.orderBy(desc(ssoConnectionsTable.updated_at_ms))\n\t\t\t.limit(1);\n\n\t\treturn row ? toConnection(row) : undefined;\n\t},\n\tlistConnectionsByOrganization: async (organizationId) => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(ssoConnectionsTable)\n\t\t\t.where(eq(ssoConnectionsTable.organization_id, organizationId))\n\t\t\t.orderBy(desc(ssoConnectionsTable.updated_at_ms));\n\n\t\treturn rows.flatMap((row) => {\n\t\t\tconst connection = toConnection(row);\n\n\t\t\treturn connection === undefined ? [] : [connection];\n\t\t});\n\t},\n\tsaveConnection: async (connection) => {\n\t\tconst values = toValues(connection);\n\t\tawait db.insert(ssoConnectionsTable).values(values).onConflictDoUpdate({\n\t\t\tset: values,\n\t\t\ttarget: ssoConnectionsTable.connection_id\n\t\t});\n\t}\n});\n",
30
30
  "// Postgres flavors of every VC store: credential offer (VCI), credential nonce (VCI),\n// presentation request (OID4VP). Same Drizzle pattern as the rest of the package — the\n// schema goes into the migrations block automatically via `getTableConfig`.\n//\n// All tables prefixed `auth_vc_*` so they sit alongside `auth_oauth_*` cleanly.\n\nimport { eq } from 'drizzle-orm';\nimport { bigint, boolean, jsonb, pgTable, varchar } from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type {\n\tCredentialNonceRecord,\n\tCredentialNonceStore,\n\tCredentialOffer,\n\tCredentialOfferStore\n} from '../oidc/vci';\nimport type {\n\tPresentationRequest,\n\tPresentationRequestStore\n} from './openid4vp';\n\nconst ID_LENGTH = 255;\n\nexport const vcCredentialNoncesTable = pgTable('auth_vc_credential_nonces', {\n\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\tnonce_hash: varchar('nonce_hash', { length: ID_LENGTH }).primaryKey()\n});\nexport const vcCredentialOffersTable = pgTable('auth_vc_credential_offers', {\n\tclient_id: varchar('client_id', { length: ID_LENGTH }).notNull(),\n\tconfiguration_id: varchar('configuration_id', {\n\t\tlength: ID_LENGTH\n\t}).notNull(),\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\tpre_authorized_code_hash: varchar('pre_authorized_code_hash', {\n\t\tlength: ID_LENGTH\n\t}).primaryKey(),\n\tredeemed: boolean('redeemed').notNull(),\n\tuser_id: varchar('user_id', { length: ID_LENGTH }).notNull()\n});\nexport const vcPresentationRequestsTable = pgTable(\n\t'auth_vc_presentation_requests',\n\t{\n\t\tclient_id: varchar('client_id', { length: ID_LENGTH }).notNull(),\n\t\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\t\texpected_issuer_jwk_json: jsonb('expected_issuer_jwk_json')\n\t\t\t.$type<JsonWebKey>()\n\t\t\t.notNull(),\n\t\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\t\tnonce: varchar('nonce', { length: ID_LENGTH }).notNull(),\n\t\trequest_id: varchar('request_id', { length: ID_LENGTH }).primaryKey(),\n\t\trequested_claims: jsonb('requested_claims').$type<string[]>().notNull(),\n\t\tresponse_uri: varchar('response_uri', { length: ID_LENGTH }).notNull(),\n\t\tstate: varchar('state', { length: ID_LENGTH })\n\t}\n);\n\nconst toOffer = (\n\trow: typeof vcCredentialOffersTable.$inferSelect\n): CredentialOffer => ({\n\tclientId: row.client_id,\n\tconfigurationId: row.configuration_id,\n\tcreatedAt: row.created_at_ms,\n\texpiresAt: row.expires_at_ms,\n\tpreAuthorizedCodeHash: row.pre_authorized_code_hash,\n\tredeemed: row.redeemed,\n\tuserId: row.user_id\n});\n\nconst toOfferValues = (\n\toffer: CredentialOffer\n): typeof vcCredentialOffersTable.$inferInsert => ({\n\tclient_id: offer.clientId,\n\tconfiguration_id: offer.configurationId,\n\tcreated_at_ms: offer.createdAt,\n\texpires_at_ms: offer.expiresAt,\n\tpre_authorized_code_hash: offer.preAuthorizedCodeHash,\n\tredeemed: offer.redeemed,\n\tuser_id: offer.userId\n});\n\nconst toPresentationRequest = (\n\trow: typeof vcPresentationRequestsTable.$inferSelect\n): PresentationRequest => ({\n\tclientId: row.client_id,\n\tcreatedAt: row.created_at_ms,\n\texpectedIssuerPublicJwk: row.expected_issuer_jwk_json,\n\texpiresAt: row.expires_at_ms,\n\tnonce: row.nonce,\n\trequestedClaims: row.requested_claims,\n\trequestId: row.request_id,\n\tresponseUri: row.response_uri,\n\tstate: row.state ?? undefined\n});\n\nconst toPresentationRequestValues = (\n\trequest: PresentationRequest\n): typeof vcPresentationRequestsTable.$inferInsert => ({\n\tclient_id: request.clientId,\n\tcreated_at_ms: request.createdAt,\n\texpected_issuer_jwk_json: request.expectedIssuerPublicJwk,\n\texpires_at_ms: request.expiresAt,\n\tnonce: request.nonce,\n\trequest_id: request.requestId,\n\trequested_claims: request.requestedClaims,\n\tresponse_uri: request.responseUri,\n\tstate: request.state ?? null\n});\n\nexport const createNeonCredentialNonceStore = (databaseUrl: string) =>\n\tcreatePostgresCredentialNonceStore(createNeonDatabase(databaseUrl));\nexport const createNeonCredentialOfferStore = (databaseUrl: string) =>\n\tcreatePostgresCredentialOfferStore(createNeonDatabase(databaseUrl));\nexport const createNeonPresentationRequestStore = (databaseUrl: string) =>\n\tcreatePostgresPresentationRequestStore(createNeonDatabase(databaseUrl));\nexport const createPostgresCredentialNonceStore = (\n\tdatabase: AnyPgDatabase\n): CredentialNonceStore => ({\n\tconsumeNonce: async (nonceHash) => {\n\t\tconst rows = await database\n\t\t\t.select()\n\t\t\t.from(vcCredentialNoncesTable)\n\t\t\t.where(eq(vcCredentialNoncesTable.nonce_hash, nonceHash))\n\t\t\t.limit(1);\n\t\tconst [row] = rows;\n\t\tif (row === undefined) return undefined;\n\t\tawait database\n\t\t\t.delete(vcCredentialNoncesTable)\n\t\t\t.where(eq(vcCredentialNoncesTable.nonce_hash, nonceHash));\n\t\tconst record: CredentialNonceRecord = {\n\t\t\texpiresAt: row.expires_at_ms,\n\t\t\tnonceHash: row.nonce_hash\n\t\t};\n\n\t\treturn record;\n\t},\n\tsaveNonce: async (record) => {\n\t\tawait database.insert(vcCredentialNoncesTable).values({\n\t\t\texpires_at_ms: record.expiresAt,\n\t\t\tnonce_hash: record.nonceHash\n\t\t});\n\t}\n});\nexport const createPostgresCredentialOfferStore = (\n\tdatabase: AnyPgDatabase\n): CredentialOfferStore => ({\n\tconsumeOffer: async (preAuthorizedCodeHash) => {\n\t\tconst rows = await database\n\t\t\t.select()\n\t\t\t.from(vcCredentialOffersTable)\n\t\t\t.where(\n\t\t\t\teq(\n\t\t\t\t\tvcCredentialOffersTable.pre_authorized_code_hash,\n\t\t\t\t\tpreAuthorizedCodeHash\n\t\t\t\t)\n\t\t\t)\n\t\t\t.limit(1);\n\t\tconst [row] = rows;\n\t\tif (row === undefined) return undefined;\n\t\tawait database\n\t\t\t.update(vcCredentialOffersTable)\n\t\t\t.set({ redeemed: true })\n\t\t\t.where(\n\t\t\t\teq(\n\t\t\t\t\tvcCredentialOffersTable.pre_authorized_code_hash,\n\t\t\t\t\tpreAuthorizedCodeHash\n\t\t\t\t)\n\t\t\t);\n\n\t\treturn toOffer(row);\n\t},\n\tsaveOffer: async (offer) => {\n\t\tawait database\n\t\t\t.insert(vcCredentialOffersTable)\n\t\t\t.values(toOfferValues(offer));\n\t}\n});\nexport const createPostgresPresentationRequestStore = (\n\tdatabase: AnyPgDatabase\n): PresentationRequestStore => ({\n\tconsumeRequest: async (requestId) => {\n\t\tconst rows = await database\n\t\t\t.select()\n\t\t\t.from(vcPresentationRequestsTable)\n\t\t\t.where(eq(vcPresentationRequestsTable.request_id, requestId))\n\t\t\t.limit(1);\n\t\tconst [row] = rows;\n\t\tif (row === undefined) return undefined;\n\t\tawait database\n\t\t\t.delete(vcPresentationRequestsTable)\n\t\t\t.where(eq(vcPresentationRequestsTable.request_id, requestId));\n\n\t\treturn toPresentationRequest(row);\n\t},\n\tgetRequest: async (requestId) => {\n\t\tconst rows = await database\n\t\t\t.select()\n\t\t\t.from(vcPresentationRequestsTable)\n\t\t\t.where(eq(vcPresentationRequestsTable.request_id, requestId))\n\t\t\t.limit(1);\n\t\tconst [row] = rows;\n\n\t\treturn row === undefined ? undefined : toPresentationRequest(row);\n\t},\n\tsaveRequest: async (request) => {\n\t\tawait database\n\t\t\t.insert(vcPresentationRequestsTable)\n\t\t\t.values(toPresentationRequestValues(request));\n\t}\n});\n",
31
31
  "import { and, eq } from 'drizzle-orm';\nimport {\n\tbigint,\n\tpgTable,\n\tprimaryKey,\n\ttext,\n\tvarchar\n} from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type { VaultEntry, VaultStore } from './types';\n\nconst ID_LENGTH = 255;\n\nexport const vaultEntriesTable = pgTable(\n\t'auth_vault_entries',\n\t{\n\t\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\t\tencrypted_value: text('encrypted_value').notNull(),\n\t\tname: varchar('name', { length: ID_LENGTH }).notNull(),\n\t\towner_id: varchar('owner_id', { length: ID_LENGTH }).notNull(),\n\t\tupdated_at_ms: bigint('updated_at_ms', { mode: 'number' }).notNull()\n\t},\n\t(table) => ({ pk: primaryKey({ columns: [table.owner_id, table.name] }) })\n);\n\ntype Row = typeof vaultEntriesTable.$inferSelect;\n\nconst toEntry = (row: Row): VaultEntry => ({\n\tcreatedAt: row.created_at_ms,\n\tencryptedValue: row.encrypted_value,\n\tname: row.name,\n\townerId: row.owner_id,\n\tupdatedAt: row.updated_at_ms\n});\n\nexport const createNeonVaultStore = (databaseUrl: string) =>\n\tcreatePostgresVaultStore(createNeonDatabase(databaseUrl));\nexport const createPostgresVaultStore = (db: AnyPgDatabase): VaultStore => ({\n\tdeleteEntry: async (ownerId, name) => {\n\t\tawait db\n\t\t\t.delete(vaultEntriesTable)\n\t\t\t.where(\n\t\t\t\tand(\n\t\t\t\t\teq(vaultEntriesTable.owner_id, ownerId),\n\t\t\t\t\teq(vaultEntriesTable.name, name)\n\t\t\t\t)\n\t\t\t);\n\t},\n\tgetEntry: async (ownerId, name) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(vaultEntriesTable)\n\t\t\t.where(\n\t\t\t\tand(\n\t\t\t\t\teq(vaultEntriesTable.owner_id, ownerId),\n\t\t\t\t\teq(vaultEntriesTable.name, name)\n\t\t\t\t)\n\t\t\t);\n\n\t\treturn row ? toEntry(row) : undefined;\n\t},\n\tlistAllEntries: async () => {\n\t\tconst rows = await db.select().from(vaultEntriesTable);\n\n\t\treturn rows.map(toEntry);\n\t},\n\tlistEntries: async (ownerId) => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(vaultEntriesTable)\n\t\t\t.where(eq(vaultEntriesTable.owner_id, ownerId));\n\n\t\treturn rows.map(toEntry);\n\t},\n\tsaveEntry: async (entry) => {\n\t\tawait db\n\t\t\t.insert(vaultEntriesTable)\n\t\t\t.values({\n\t\t\t\tcreated_at_ms: entry.createdAt,\n\t\t\t\tencrypted_value: entry.encryptedValue,\n\t\t\t\tname: entry.name,\n\t\t\t\towner_id: entry.ownerId,\n\t\t\t\tupdated_at_ms: entry.updatedAt\n\t\t\t})\n\t\t\t.onConflictDoUpdate({\n\t\t\t\tset: {\n\t\t\t\t\tencrypted_value: entry.encryptedValue,\n\t\t\t\t\tupdated_at_ms: entry.updatedAt\n\t\t\t\t},\n\t\t\t\ttarget: [vaultEntriesTable.owner_id, vaultEntriesTable.name]\n\t\t\t});\n\t}\n});\n",
32
32
  "import { eq } from 'drizzle-orm';\nimport {\n\tbigint,\n\tboolean,\n\tjsonb,\n\tpgTable,\n\ttext,\n\tvarchar\n} from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type { WebAuthnCredential, WebAuthnCredentialStore } from './types';\n\nconst ID_LENGTH = 255;\nconst DEVICE_TYPE_LENGTH = 32;\n\nexport const webauthnCredentialsTable = pgTable('auth_webauthn_credentials', {\n\tbacked_up: boolean('backed_up'),\n\tcounter: bigint('counter', { mode: 'number' }).notNull().default(0),\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\tcredential_id: varchar('credential_id', { length: ID_LENGTH }).primaryKey(),\n\tdevice_type: varchar('device_type', { length: DEVICE_TYPE_LENGTH }),\n\tlast_used_at_ms: bigint('last_used_at_ms', { mode: 'number' }),\n\tpublic_key: text('public_key').notNull(),\n\ttransports: jsonb('transports').$type<string[]>(),\n\tuser_id: varchar('user_id', { length: ID_LENGTH }).notNull()\n});\n\ntype WebAuthnRow = typeof webauthnCredentialsTable.$inferSelect;\ntype WebAuthnInsert = typeof webauthnCredentialsTable.$inferInsert;\n\nconst toCredential = (row: WebAuthnRow): WebAuthnCredential => ({\n\tbackedUp: row.backed_up ?? undefined,\n\tcounter: row.counter,\n\tcreatedAt: row.created_at_ms,\n\tcredentialId: row.credential_id,\n\tdeviceType: row.device_type ?? undefined,\n\tlastUsedAt: row.last_used_at_ms ?? undefined,\n\tpublicKey: row.public_key,\n\ttransports: row.transports ?? undefined,\n\tuserId: row.user_id\n});\n\nconst toValues = (credential: WebAuthnCredential): WebAuthnInsert => ({\n\tbacked_up: credential.backedUp ?? null,\n\tcounter: credential.counter,\n\tcreated_at_ms: credential.createdAt,\n\tcredential_id: credential.credentialId,\n\tdevice_type: credential.deviceType ?? null,\n\tlast_used_at_ms: credential.lastUsedAt ?? null,\n\tpublic_key: credential.publicKey,\n\ttransports: credential.transports ?? null,\n\tuser_id: credential.userId\n});\n\nexport const createNeonWebAuthnCredentialStore = (databaseUrl: string) =>\n\tcreatePostgresWebAuthnCredentialStore(createNeonDatabase(databaseUrl));\nexport const createPostgresWebAuthnCredentialStore = (\n\tdb: AnyPgDatabase\n): WebAuthnCredentialStore => ({\n\tgetCredential: async (credentialId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(webauthnCredentialsTable)\n\t\t\t.where(eq(webauthnCredentialsTable.credential_id, credentialId))\n\t\t\t.limit(1);\n\n\t\treturn row ? toCredential(row) : undefined;\n\t},\n\tlistCredentialsByUser: async (userId) => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(webauthnCredentialsTable)\n\t\t\t.where(eq(webauthnCredentialsTable.user_id, userId));\n\n\t\treturn rows.map(toCredential);\n\t},\n\tremoveCredential: async (credentialId) => {\n\t\tawait db\n\t\t\t.delete(webauthnCredentialsTable)\n\t\t\t.where(eq(webauthnCredentialsTable.credential_id, credentialId));\n\t},\n\tsaveCredential: async (credential) => {\n\t\tconst values = toValues(credential);\n\t\tawait db\n\t\t\t.insert(webauthnCredentialsTable)\n\t\t\t.values(values)\n\t\t\t.onConflictDoUpdate({\n\t\t\t\tset: values,\n\t\t\t\ttarget: webauthnCredentialsTable.credential_id\n\t\t\t});\n\t}\n});\n",
@@ -36,7 +36,7 @@
36
36
  "// Single export of every block's migrations. Consumers pick which blocks they enabled\n// in `auth()` and pass that subset to `runMigrations({ blocks: [...] })`, or omit `blocks`\n// to apply every migration the package ships. Adding a new block's migrations: import its\n// tables here + add to the `blockMigrations` map.\n\nimport {\n\tknownDevicesTable,\n\tloginHistoryTable\n} from '../adaptive/postgresStores';\nimport {\n\taccessTokensTable,\n\tapiClientsTable,\n\tapiKeysTable\n} from '../apikeys/postgresStores';\nimport { auditEventsTable } from '../audit/postgresAuditStore';\nimport {\n\tcredentialResetTokensTable,\n\tcredentialVerificationTokensTable,\n\tcredentialsTable\n} from '../credentials/postgresCredentialStore';\nimport { warrantsTable } from '../fga/postgresStores';\nimport {\n\tlinkedProviderBindingsTable,\n\tlinkedProviderGrantsTable\n} from '../linkedProviders/neonStores';\nimport { lockoutsTable } from '../lockout/postgresLockoutStore';\nimport { mfaEnrollmentsTable } from '../mfa/postgresMfaStore';\nimport {\n\toauthBackchannelAuthRequestsTable,\n\toauthClientAssertionJtisTable,\n\toauthClientRegistrationTokensTable,\n\toauthClientsTable,\n\toauthCodesTable,\n\toauthDeviceAuthorizationsTable,\n\toauthInitialAccessTokensTable,\n\toauthLogoutDeliveriesTable,\n\toauthPushedAuthorizationRequestsTable,\n\toauthRefreshTokensTable\n} from '../oidc/postgresStores';\nimport {\n\torganizationInvitationsTable,\n\torganizationMembershipsTable,\n\torganizationsTable\n} from '../organizations/postgresOrganizationStore';\nimport { passwordlessTokensTable } from '../passwordless/postgresPasswordlessTokenStore';\nimport { setupSessionsTable } from '../portal/postgresSetupSessionStore';\nimport { rolesTable } from '../roles/postgresRoleStore';\nimport { scimTokensTable } from '../scim/postgresScimTokenStore';\nimport {\n\tauthSessionsTable,\n\tauthUnregisteredSessionsTable\n} from '../session/neonStore';\nimport { samlServiceProvidersTable } from '../sso/postgresSamlServiceProviderStore';\nimport { ssoConnectionsTable } from '../sso/postgresSsoConnectionStore';\nimport {\n\tvcCredentialNoncesTable,\n\tvcCredentialOffersTable,\n\tvcPresentationRequestsTable\n} from '../vc/postgresVcStores';\nimport { vaultEntriesTable } from '../vault/postgresVaultStore';\nimport { webauthnCredentialsTable } from '../webauthn/postgresWebAuthnCredentialStore';\nimport { webhookDeliveriesTable } from '../webhooks/postgresStore';\nimport { tablesToInitSql } from './generate';\nimport type { BlockMigrations } from './types';\n\nexport type BlockName =\n\t| 'adaptive'\n\t| 'apikeys'\n\t| 'audit'\n\t| 'credentials'\n\t| 'fga'\n\t| 'linkedProviders'\n\t| 'lockout'\n\t| 'mfa'\n\t| 'oidc'\n\t| 'organizations'\n\t| 'passwordless'\n\t| 'portal'\n\t| 'roles'\n\t| 'scim'\n\t| 'sessions'\n\t| 'sso'\n\t| 'vault'\n\t| 'vc'\n\t| 'webauthn'\n\t| 'webhooks';\n\nconst initMigration = (\n\tblock: BlockName,\n\ttables: Parameters<typeof tablesToInitSql>[0]\n): BlockMigrations => ({\n\tblock,\n\tmigrations: [{ id: '0001_init', sql: tablesToInitSql(tables) }]\n});\n\nexport const blockMigrations: Record<BlockName, BlockMigrations> = {\n\tadaptive: initMigration('adaptive', [knownDevicesTable, loginHistoryTable]),\n\tapikeys: initMigration('apikeys', [\n\t\taccessTokensTable,\n\t\tapiClientsTable,\n\t\tapiKeysTable\n\t]),\n\taudit: initMigration('audit', [auditEventsTable]),\n\tcredentials: initMigration('credentials', [\n\t\tcredentialsTable,\n\t\tcredentialResetTokensTable,\n\t\tcredentialVerificationTokensTable\n\t]),\n\tfga: initMigration('fga', [warrantsTable]),\n\tlinkedProviders: initMigration('linkedProviders', [\n\t\tlinkedProviderBindingsTable,\n\t\tlinkedProviderGrantsTable\n\t]),\n\tlockout: initMigration('lockout', [lockoutsTable]),\n\tmfa: initMigration('mfa', [mfaEnrollmentsTable]),\n\toidc: initMigration('oidc', [\n\t\toauthBackchannelAuthRequestsTable,\n\t\toauthClientAssertionJtisTable,\n\t\toauthClientRegistrationTokensTable,\n\t\toauthClientsTable,\n\t\toauthCodesTable,\n\t\toauthDeviceAuthorizationsTable,\n\t\toauthInitialAccessTokensTable,\n\t\toauthLogoutDeliveriesTable,\n\t\toauthPushedAuthorizationRequestsTable,\n\t\toauthRefreshTokensTable\n\t]),\n\torganizations: initMigration('organizations', [\n\t\torganizationsTable,\n\t\torganizationMembershipsTable,\n\t\torganizationInvitationsTable\n\t]),\n\tpasswordless: initMigration('passwordless', [passwordlessTokensTable]),\n\tportal: initMigration('portal', [setupSessionsTable]),\n\troles: initMigration('roles', [rolesTable]),\n\tscim: initMigration('scim', [scimTokensTable]),\n\tsessions: initMigration('sessions', [\n\t\tauthSessionsTable,\n\t\tauthUnregisteredSessionsTable\n\t]),\n\tsso: initMigration('sso', [ssoConnectionsTable, samlServiceProvidersTable]),\n\tvault: initMigration('vault', [vaultEntriesTable]),\n\tvc: initMigration('vc', [\n\t\tvcCredentialOffersTable,\n\t\tvcCredentialNoncesTable,\n\t\tvcPresentationRequestsTable\n\t]),\n\twebauthn: initMigration('webauthn', [webauthnCredentialsTable]),\n\twebhooks: initMigration('webhooks', [webhookDeliveriesTable])\n};\n\nexport { runMigrations } from './runner';\nexport type { Migration, BlockMigrations } from './types';\n",
37
37
  "#!/usr/bin/env bun\n// CLI dispatcher. The bin entry `absolute-auth` lands here; the first\n// positional decides which subcommand we run.\n//\n// bunx absolute-auth migrate --db <url> [--blocks block1,block2,...]\n// bunx absolute-auth import <source> <file> --db <url> [--commit]\n//\n// Subcommands:\n// migrate apply the package's Drizzle migrations\n// import read a user export from another auth library, insert into our schema\n// help print this message\n\nimport { importers, runImport } from './import';\nimport { blockMigrations, type BlockName, runMigrations } from '../migrations';\n\nconst TOP_USAGE = `Usage:\n bunx absolute-auth <command> [options]\n\nCommands:\n migrate Apply the package's Drizzle migrations\n import <source> <file> Import a user export from another auth library\n <source> is one of: ${Object.keys(importers).sort().join(', ')}\n help Print this message\n\nRun 'bunx absolute-auth <command> --help' for command-specific options.\n`;\n\nconst MIGRATE_USAGE = `Usage:\n bunx absolute-auth migrate --db <url> [--blocks block1,block2,...]\n\nOptions:\n --db, --database-url Postgres connection string (falls back to DATABASE_URL env)\n --blocks Comma-separated subset of blocks to apply (default: all)\n --help Print this message\n\nAvailable blocks: ${Object.keys(blockMigrations).sort().join(', ')}\n`;\n\nconst IMPORT_USAGE = `Usage:\n bunx absolute-auth import <source> <file> --db <url> [--commit]\n\nArguments:\n source one of: ${Object.keys(importers).sort().join(', ')}\n file path to the export JSON (see docs/MIGRATE-FROM-*.md per source)\n\nOptions:\n --db, --database-url Postgres connection string (falls back to DATABASE_URL env)\n --commit Without this, the run is a dry-run (counts only, no inserts)\n --help Print this message\n`;\n\ntype MigrateArgs = {\n\tblocks: BlockName[] | undefined;\n\tdatabaseUrl: string | undefined;\n\thelp: boolean;\n};\n\nconst parseMigrateArgs = (argv: string[]): MigrateArgs => {\n\tconst parsed: MigrateArgs = {\n\t\tblocks: undefined,\n\t\tdatabaseUrl: undefined,\n\t\thelp: false\n\t};\n\tconst args = [...argv];\n\twhile (args.length > 0) {\n\t\tconst flag = args.shift();\n\t\tif (flag === '--help' || flag === '-h') {\n\t\t\tparsed.help = true;\n\t\t} else if (flag === '--db' || flag === '--database-url') {\n\t\t\tparsed.databaseUrl = args.shift();\n\t\t} else if (flag === '--blocks') {\n\t\t\tconst list = args.shift() ?? '';\n\t\t\tparsed.blocks = list\n\t\t\t\t.split(',')\n\t\t\t\t.map((entry) => entry.trim())\n\t\t\t\t.filter((entry) => entry.length > 0)\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- validated against blockMigrations keys below\n\t\t\t\t.map((entry) => entry as BlockName);\n\t\t}\n\t}\n\n\treturn parsed;\n};\n\ntype ImportArgs = {\n\tcommit: boolean;\n\tdatabaseUrl: string | undefined;\n\tfile: string | undefined;\n\thelp: boolean;\n\tsource: string | undefined;\n};\n\nconst parseImportArgs = (argv: string[]): ImportArgs => {\n\tconst parsed: ImportArgs = {\n\t\tcommit: false,\n\t\tdatabaseUrl: undefined,\n\t\tfile: undefined,\n\t\thelp: false,\n\t\tsource: undefined\n\t};\n\tconst args = [...argv];\n\tconst positionals: string[] = [];\n\twhile (args.length > 0) {\n\t\tconst next = args.shift();\n\t\tif (next === undefined) break;\n\t\tif (next === '--help' || next === '-h') {\n\t\t\tparsed.help = true;\n\t\t} else if (next === '--db' || next === '--database-url') {\n\t\t\tparsed.databaseUrl = args.shift();\n\t\t} else if (next === '--commit') {\n\t\t\tparsed.commit = true;\n\t\t} else if (!next.startsWith('--')) {\n\t\t\tpositionals.push(next);\n\t\t}\n\t}\n\tparsed.source = positionals[0];\n\tparsed.file = positionals[1];\n\n\treturn parsed;\n};\n\nconst die = (message: string, usage: string) => {\n\tprocess.stderr.write(`error: ${message}\\n\\n`);\n\tprocess.stderr.write(usage);\n\tprocess.exit(1);\n};\n\nconst runMigrate = async (argv: string[]) => {\n\tconst { blocks, databaseUrl, help } = parseMigrateArgs(argv);\n\tif (help) {\n\t\tprocess.stdout.write(MIGRATE_USAGE);\n\n\t\treturn;\n\t}\n\tconst resolved = databaseUrl ?? process.env['DATABASE_URL'];\n\tif (resolved === undefined || resolved.length === 0) {\n\t\tdie('a Postgres URL is required (--db or DATABASE_URL)', MIGRATE_USAGE);\n\n\t\treturn;\n\t}\n\tconst unknown =\n\t\tblocks?.filter((block) => !(block in blockMigrations)) ?? [];\n\tif (unknown.length > 0) {\n\t\tdie(`unknown block(s): ${unknown.join(', ')}`, MIGRATE_USAGE);\n\n\t\treturn;\n\t}\n\tconst result = await runMigrations({ blocks, databaseUrl: resolved });\n\tprocess.stdout.write(\n\t\t`\\n${result.applied.length} migration(s) applied, ${result.skipped.length} skipped.\\n`\n\t);\n};\n\nconst runImportCommand = async (argv: string[]) => {\n\tconst { commit, databaseUrl, file, help, source } = parseImportArgs(argv);\n\tif (help) {\n\t\tprocess.stdout.write(IMPORT_USAGE);\n\n\t\treturn;\n\t}\n\tif (source === undefined) {\n\t\tdie('source is required', IMPORT_USAGE);\n\n\t\treturn;\n\t}\n\tconst importer = importers[source];\n\tif (importer === undefined) {\n\t\tdie(`unknown source \"${source}\"`, IMPORT_USAGE);\n\n\t\treturn;\n\t}\n\tif (file === undefined) {\n\t\tdie('file path is required', IMPORT_USAGE);\n\n\t\treturn;\n\t}\n\tconst resolved = databaseUrl ?? process.env['DATABASE_URL'];\n\tif (resolved === undefined || resolved.length === 0) {\n\t\tdie('a Postgres URL is required (--db or DATABASE_URL)', IMPORT_USAGE);\n\n\t\treturn;\n\t}\n\n\tprocess.stdout.write(`[${source}] parsing ${file}…\\n`);\n\tconst result = await importer.parse(file);\n\tprocess.stdout.write(\n\t\t`[${source}] parsed ${result.users.length} user(s), ${result.identities.length} identity row(s).\\n`\n\t);\n\tconst counts = await runImport(result, { commit, databaseUrl: resolved });\n\tif (commit) {\n\t\tprocess.stdout.write(\n\t\t\t`[${source}] inserted ${counts.userCount} user(s), ${counts.identityCount} new identity row(s). ✓\\n`\n\t\t);\n\t} else {\n\t\tprocess.stdout.write(\n\t\t\t`[${source}] dry-run — pass --commit to insert.\\n`\n\t\t);\n\t}\n};\n\nconst main = async () => {\n\tconst argv = process.argv.slice(2);\n\tconst command = argv.shift();\n\tif (command === undefined || command === 'help' || command === '--help') {\n\t\tprocess.stdout.write(TOP_USAGE);\n\n\t\treturn;\n\t}\n\tif (command === 'migrate') {\n\t\tawait runMigrate(argv);\n\n\t\treturn;\n\t}\n\tif (command === 'import') {\n\t\tawait runImportCommand(argv);\n\n\t\treturn;\n\t}\n\tdie(`unknown command \"${command}\"`, TOP_USAGE);\n};\n\nawait main();\n"
38
38
  ],
39
- "mappings": "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",
39
+ "mappings": ";;;;AASA;;;ACgBA;AAqBA,IAAM,qBAAqB,CAAC,SAA8B;AAAA,EACzD,MAAM,UAAU,KAAK,KAAK;AAAA,EAC1B,IAAI,QAAQ,WAAW,GAAG,GAAG;AAAA,IAC5B,OAAO,KAAK,MAAM,OAAO;AAAA,EAC1B;AAAA,EAGA,OAAO,QACL,MAAM;AAAA,CAAI,EACV,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,EAChC,IAAI,CAAC,SAAS,KAAK,MAAM,IAAI,CAAc;AAAA;AAGvC,IAAM,gBAA0B;AAAA,EACtC,QAAQ;AAAA,EACR,OAAO,OAAO,SAAwC;AAAA,IACrD,MAAM,OAAO,MAAM,SAAS,MAAM,OAAO;AAAA,IACzC,MAAM,aAAa,mBAAmB,IAAI;AAAA,IAE1C,MAAM,QAAQ,WAAW,IAAI,CAAC,SAAS;AAAA,MACtC,aACC,IAAI,eAAe,YAChB,KAAK,IAAI,IACT,KAAK,MAAM,IAAI,UAAU;AAAA,MAC7B,OAAO,IAAI;AAAA,MACX,eAAe,IAAI,kBAAkB;AAAA,MACrC,YAAY,IAAI;AAAA,MAChB,YAAY,IAAI;AAAA,MAChB,WAAW,IAAI;AAAA,MACf,cAAc,IAAI;AAAA,MAClB,kBACC,IAAI,eAAe,WAAW,MAAM,KACpC,IAAI,eAAe,WAAW,MAAM,KACpC,IAAI,eAAe,WAAW,MAAM,IAChC,WACD;AAAA,IACL,EAAE;AAAA,IAKF,MAAM,aAAa,WAAW,QAAQ,CAAC,SACrC,IAAI,cAAc,CAAC,GAClB,OAAO,CAAC,aAAa,SAAS,aAAa,OAAO,EAClD,IAAI,CAAC,cAAc;AAAA,MACnB,cAAc,SAAS,SAAS,QAAQ,WAAW,EAAE;AAAA,MACrD,aACC,IAAI,eAAe,YAChB,KAAK,IAAI,IACT,KAAK,MAAM,IAAI,UAAU;AAAA,MAC7B,UACC,SAAS,eAAe,YACrB,YACA,EAAE,YAAY,SAAS,WAAW;AAAA,MACtC,iBAAiB,SAAS;AAAA,MAC1B,gBAAgB,IAAI;AAAA,IACrB,EAAE,CACJ;AAAA,IAEA,OAAO,EAAE,YAAY,QAAQ,SAAS,MAAM;AAAA;AAE9C;;;ACvFA,qBAAS;AAyBT,IAAM,mBAAmB,CAAC,aACzB,SAAS,WAAW,QAAQ,IAAI,SAAS,MAAM,SAAS,MAAM,IAAI;AAE5D,IAAM,gBAA0B;AAAA,EACtC,QAAQ;AAAA,EACR,OAAO,OAAO,SAAwC;AAAA,IACrD,MAAM,OAAO,MAAM,UAAS,MAAM,OAAO;AAAA,IACzC,MAAM,aAA0B,KAAK,MAAM,IAAI;AAAA,IAE/C,MAAM,QAAQ,WACZ,OACA,CAAC,QACA,IAAI,oBAAoB,aACxB,IAAI,gBAAgB,SAAS,CAC/B,EACC,IAAI,CAAC,QAAQ;AAAA,MACb,MAAM,UACL,IAAI,iBAAiB,KACpB,CAAC,MACA,IAAI,6BAA6B,aACjC,EAAE,cAAc,SAAS,CAC3B,KAAK,IAAI,kBAAkB;AAAA,MAE5B,OAAO;AAAA,QACN,aAAa,IAAI,cAAc,KAAK,IAAI;AAAA,QACxC,OAAO,SAAS,iBAAiB;AAAA,QACjC,eAAe,SAAS,cAAc,WAAW;AAAA,QACjD,YAAY,IAAI;AAAA,QAChB,YAAY,IAAI;AAAA,QAChB,WAAW,IAAI;AAAA,QACf,cAAc,IAAI;AAAA,QAClB,kBAAkB,IAAI,iBAAiB,WACtC,WACD,IACI,aACD,IAAI,iBAAiB,WAAW,IAAI,IAClC,WACD;AAAA,MACL;AAAA,KACA;AAAA,IAEF,MAAM,aAAa,WAAW,QAAQ,CAAC,SACrC,IAAI,qBAAqB,CAAC,GAAG,IAAI,CAAC,aAAa;AAAA,MAC/C,cAAc,iBAAiB,QAAQ,QAAQ;AAAA,MAC/C,aAAa,IAAI,cAAc,KAAK,IAAI;AAAA,MACxC,iBACC,QAAQ,oBAAoB,QAAQ,eAAe;AAAA,MACpD,gBAAgB,IAAI;AAAA,IACrB,EAAE,CACH;AAAA,IAEA,OAAO,EAAE,YAAY,QAAQ,SAAS,MAAM;AAAA;AAE9C;;;ACjFA,qBAAS;AAoBT,IAAM,OAAO,CAAC,UAAuC;AAAA,EACpD,IAAI,UAAU;AAAA,IAAW,OAAO,KAAK,IAAI;AAAA,EACzC,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO,QAAQ,gBAAO,QAAQ,OAAO;AAAA,EAEpE,OAAO,KAAK,MAAM,KAAK;AAAA;AAGjB,IAAM,gBAA0B;AAAA,EACtC,QAAQ;AAAA,EACR,OAAO,OAAO,SAAwC;AAAA,IACrD,MAAM,OAAO,MAAM,UAAS,MAAM,OAAO;AAAA,IACzC,MAAM,SAAsB,KAAK,MAAM,IAAI;AAAA,IAK3C,MAAM,mBAAmB,IAAI;AAAA,IAC7B,MAAM,YAAwB,CAAC;AAAA,IAC/B,WAAW,OAAO,OAAO,QAAQ,CAAC,GAAG;AAAA,MACpC,MAAM,YAAY,IAAI,GAAG,QAAQ,GAAG;AAAA,MACpC,IAAI,YAAY;AAAA,QAAG;AAAA,MACnB,MAAM,WAAW,IAAI,GAAG,MAAM,GAAG,SAAS;AAAA,MAC1C,IAAI,aAAa,WAAW,aAAa,YAAY;AAAA,QACpD,iBAAiB,IAAI,IAAI,SAAS,IAAI,eAAe;AAAA,MACtD,EAAO;AAAA,QACN,UAAU,KAAK,GAAG;AAAA;AAAA,IAEpB;AAAA,IAEA,MAAM,QAAQ,OAAO,MAAM,IAAI,CAAC,SAAS;AAAA,MACxC,aAAa,KAAK,IAAI,UAAU;AAAA,MAChC,OAAO,IAAI,SAAS;AAAA,MACpB,eAAe;AAAA,MACf,YAAY,IAAI;AAAA,MAChB,cAAc,iBAAiB,IAAI,IAAI,EAAE;AAAA,MACzC,kBAAkB,iBAChB,IAAI,IAAI,EAAE,GACT,WAAW,WAAW,IACrB,aACD,iBAAiB,IAAI,IAAI,EAAE,GAAG,WAAW,IAAI,IAC3C,WACD;AAAA,IACL,EAAE;AAAA,IAEF,MAAM,aAAa,UAAU,IAAI,CAAC,QAAQ;AAAA,MACzC,MAAM,YAAY,IAAI,GAAG,QAAQ,GAAG;AAAA,MAEpC,OAAO;AAAA,QACN,cAAc,IAAI,GAAG,MAAM,GAAG,SAAS;AAAA,QACvC,aAAa,KAAK,IAAI;AAAA,QACtB,iBAAiB,IAAI,GAAG,MAAM,YAAY,CAAC;AAAA,QAC3C,gBAAgB,IAAI;AAAA,MACrB;AAAA,KACA;AAAA,IAED,OAAO,EAAE,YAAY,QAAQ,SAAS,MAAM;AAAA;AAE9C;;;ACnEA,qBAAS;AAwBT,IAAM,YAAY,CAAC,SAA6B;AAAA,EAC/C,IAAI,SAAS;AAAA,IACZ,OAAO,EAAE,YAAY,WAAW,WAAW,UAAU;AAAA,EACtD,MAAM,QAAQ,KAAK,MAAM,KAAK;AAAA,EAC9B,IAAI,MAAM,WAAW;AAAA,IACpB,OAAO,EAAE,YAAY,WAAW,WAAW,MAAM,GAAG;AAAA,EAErD,OAAO;AAAA,IACN,YAAY,MAAM,MAAM,CAAC,EAAE,KAAK,GAAG;AAAA,IACnC,WAAW,MAAM;AAAA,EAClB;AAAA;AAGM,IAAM,mBAA6B;AAAA,EACzC,QAAQ;AAAA,EACR,OAAO,OAAO,SAAwC;AAAA,IACrD,MAAM,OAAO,MAAM,UAAS,MAAM,OAAO;AAAA,IACzC,MAAM,SAAyB,KAAK,MAAM,IAAI;AAAA,IAE9C,MAAM,QAAQ,OAAO,MAAM,IAAI,CAAC,QAAQ;AAAA,MACvC,MAAM,QAAQ,UAAU,IAAI,IAAI;AAAA,MAChC,MAAM,eAAe,OAAO,oBAAoB,IAAI;AAAA,MAEpD,OAAO;AAAA,QACN,aAAa,KAAK,IAAI;AAAA,QACtB,OAAO,IAAI;AAAA,QACX,eACC,IAAI,kBAAkB,QACtB,IAAI,kBAAkB;AAAA,QACvB,YAAY,IAAI;AAAA,QAChB,YAAY,MAAM;AAAA,QAClB,WAAW,MAAM;AAAA,QACjB;AAAA,QACA,kBAAkB,cAAc,WAAW,WAAW,IAClD,aACD,cAAc,WAAW,IAAI,IAC3B,WACD;AAAA,MACL;AAAA,KACA;AAAA,IAED,MAAM,cAAc,OAAO,YAAY,CAAC,GACtC,OACA,CAAC,YACA,QAAQ,SAAS,aAAa,QAAQ,SAAS,OACjD,EACC,IAAI,CAAC,aAAa;AAAA,MAClB,cAAc,QAAQ;AAAA,MACtB,aAAa,KAAK,IAAI;AAAA,MACtB,iBAAiB,QAAQ;AAAA,MACzB,gBAAgB,QAAQ;AAAA,IACzB,EAAE;AAAA,IAEH,OAAO,EAAE,YAAY,QAAQ,YAAY,MAAM;AAAA;AAEjD;;;ACnFA,qBAAS;AA4BT,IAAM,gBAAgB,CAAC,SAA6B;AAAA,EACnD,IAAI,SAAS;AAAA,IACZ,OAAO,EAAE,YAAY,WAAW,WAAW,UAAU;AAAA,EACtD,MAAM,QAAQ,KAAK,MAAM,KAAK;AAAA,EAC9B,IAAI,MAAM,WAAW;AAAA,IACpB,OAAO,EAAE,YAAY,WAAW,WAAW,MAAM,GAAG;AAAA,EAErD,OAAO;AAAA,IACN,YAAY,MAAM,MAAM,CAAC,EAAE,KAAK,GAAG;AAAA,IACnC,WAAW,MAAM;AAAA,EAClB;AAAA;AAGM,IAAM,mBAA6B;AAAA,EACzC,QAAQ;AAAA,EACR,OAAO,OAAO,SAAwC;AAAA,IACrD,MAAM,OAAO,MAAM,UAAS,MAAM,OAAO;AAAA,IACzC,MAAM,SAAyB,KAAK,MAAM,IAAI;AAAA,IAE9C,MAAM,QAAQ,OAAO,MAAM,IAAI,CAAC,QAAQ;AAAA,MACvC,MAAM,OAAO,IAAI,sBAAsB,CAAC;AAAA,MACxC,MAAM,QAAQ,cAAc,KAAK,SAAS;AAAA,MAE1C,OAAO;AAAA,QACN,aACC,IAAI,eAAe,YAChB,KAAK,IAAI,IACT,KAAK,MAAM,IAAI,UAAU;AAAA,QAC7B,OAAO,IAAI;AAAA,QACX,eAAe,IAAI,uBAAuB;AAAA,QAC1C,YAAY,IAAI;AAAA,QAChB,YAAY,KAAK,eAAe,MAAM;AAAA,QACtC,WAAW,KAAK,cAAc,MAAM;AAAA,QACpC,cAAc,IAAI;AAAA,QAClB,kBAAkB,IAAI,oBAAoB,WAAW,IAAI,IACrD,WACD;AAAA,MACJ;AAAA,KACA;AAAA,IAED,MAAM,cAAc,OAAO,cAAc,CAAC,GAAG,IAAI,CAAC,cAAc;AAAA,MAC/D,cAAc,SAAS;AAAA,MACvB,aACC,SAAS,eAAe,YACrB,KAAK,IAAI,IACT,KAAK,MAAM,SAAS,UAAU;AAAA,MAClC,iBAAiB,SAAS;AAAA,MAC1B,gBAAgB,SAAS;AAAA,IAC1B,EAAE;AAAA,IAEF,OAAO,EAAE,YAAY,QAAQ,YAAY,MAAM;AAAA;AAEjD;;;ALtFO,IAAM,YAAsC;AAAA,EAClD,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,UAAU;AAAA,EACV,UAAU;AACX;AAaO,IAAM,YAAY,OACxB,QACA,YACI;AAAA,EACJ,MAAM,MAAM,KAAK,QAAQ,WAAW;AAAA,EAIpC,MAAM,kBAAkB,IAAI;AAAA,EAC5B,WAAW,QAAQ,OAAO,OAAO;AAAA,IAChC,gBAAgB,IAAI,KAAK,YAAY,OAAO,WAAW,CAAC;AAAA,EACzD;AAAA,EAEA,IAAI,CAAC,QAAQ,QAAQ;AAAA,IAEpB,OAAO;AAAA,MACN,eAAe,OAAO,WAAW;AAAA,MACjC,WAAW,OAAO,MAAM;AAAA,IACzB;AAAA,EACD;AAAA,EAKA,WAAW,QAAQ,OAAO,OAAO;AAAA,IAChC,MAAM,MAAM,gBAAgB,IAAI,KAAK,UAAU;AAAA,IAC/C,MAAM;AAAA;AAAA;AAAA,MAGF;AAAA,MACA,KAAK,MAAM,YAAY,EAAE,KAAK;AAAA,MAC9B,KAAK,gBAAgB;AAAA,MACrB,KAAK,cAAc;AAAA,MACnB,KAAK,aAAa;AAAA,MAClB,KAAK;AAAA,mBACQ,KAAK;AAAA;AAAA;AAAA;AAAA,EAIvB;AAAA,EAMA,IAAI,qBAAqB;AAAA,EACzB,WAAW,YAAY,OAAO,YAAY;AAAA,IACzC,MAAM,MAAM,gBAAgB,IAAI,SAAS,cAAc;AAAA,IACvD,IAAI,QAAQ;AAAA,MAAW;AAAA,IACvB,MAAM,WAAW,MAAM;AAAA;AAAA;AAAA,MAGnB,GAAG,SAAS,gBAAgB,SAAS;AAAA,MACrC,SAAS;AAAA,MACT,SAAS;AAAA,MACT;AAAA,MACA,SAAS,YAAY,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,IAK1B,IAAI,MAAM,QAAQ,QAAQ,KAAK,SAAS,SAAS;AAAA,MAChD;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACN,eAAe;AAAA,IACf,WAAW,OAAO,MAAM;AAAA,EACzB;AAAA;;;AMxGD;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACDA,iBAAS;AACT;;;ADgBA,IAAM,YAAY;AAEX,IAAM,oBAAoB,QAChC,sBACA;AAAA,EACC,WAAW,QAAQ,aAAa,EAAE,QAAQ,UAAU,CAAC,EAAE,QAAQ;AAAA,EAC/D,kBAAkB,OAAO,oBAAoB;AAAA,IAC5C,MAAM;AAAA,EACP,CAAC,EAAE,QAAQ;AAAA,EACX,OAAO,QAAQ,SAAS,EAAE,QAAQ,UAAU,CAAC;AAAA,EAC7C,iBAAiB,OAAO,mBAAmB;AAAA,IAC1C,MAAM;AAAA,EACP,CAAC,EAAE,QAAQ;AAAA,EACX,SAAS,QAAQ,SAAS,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACnD,SAAS,QAAQ,WAAW,EAAE,QAAQ,UAAU,CAAC,EAAE,QAAQ;AAC5D,GACA,CAAC,UAAU,CAAC,WAAW,EAAE,SAAS,CAAC,MAAM,SAAS,MAAM,SAAS,EAAE,CAAC,CAAC,CACtE;AAEO,IAAM,oBAAoB,QAAQ,sBAAsB;AAAA,EAC9D,YAAY,QAAQ,cAAc,EAAE,QAAQ,UAAU,CAAC,EAAE,WAAW;AAAA,EACpE,SAAS,QAAQ,WAAW,EAAE,QAAQ,UAAU,CAAC;AAAA,EACjD,WAAW,QAAQ,aAAa,EAAE,QAAQ,UAAU,CAAC,EAAE,QAAQ;AAAA,EAC/D,YAAY,QAAQ,cAAc,EAAE,QAAQ,UAAU,CAAC;AAAA,EACvD,UAAU,gBAAgB,UAAU;AAAA,EACpC,WAAW,gBAAgB,WAAW;AAAA,EACtC,SAAS,QAAQ,WAAW,EAAE,QAAQ,UAAU,CAAC,EAAE,QAAQ;AAAA,EAC3D,cAAc,OAAO,gBAAgB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACjE,SAAS,QAAQ,WAAW,EAAE,QAAQ,UAAU,CAAC,EAAE,QAAQ;AAC5D,CAAC;;;AE9CD,iBAAS,aAAM;AACf,mBAAS,oBAAQ,2BAAe;AAWhC,IAAM,aAAY;AAEX,IAAM,oBAAoB,SAAQ,sBAAsB;AAAA,EAC9D,WAAW,SAAQ,aAAa,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EAC/D,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,cAAc,SAAQ,gBAAgB,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EACrE,UAAU,SAAQ,YAAY,EAAE,QAAQ,WAAU,CAAC;AAAA,EACnD,QAAQ,KAAK,QAAQ,EAAE,MAAM,EAAE,QAAQ;AAAA,EACvC,UAAU,SAAQ,YAAY,EAAE,QAAQ,WAAU,CAAC,EAAE,WAAW;AACjE,CAAC;AACM,IAAM,kBAAkB,SAAQ,oBAAoB;AAAA,EAC1D,WAAW,SAAQ,aAAa,EAAE,QAAQ,WAAU,CAAC,EAAE,WAAW;AAAA,EAClE,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,eAAe,SAAQ,iBAAiB,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EACvE,MAAM,SAAQ,QAAQ,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EACrD,UAAU,SAAQ,YAAY,EAAE,QAAQ,WAAU,CAAC;AAAA,EACnD,QAAQ,KAAK,QAAQ,EAAE,MAAM,EAAE,QAAQ;AACxC,CAAC;AACM,IAAM,eAAe,SAAQ,iBAAiB;AAAA,EACpD,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAAA,EACzD,YAAY,SAAQ,cAAc,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EACjE,QAAQ,SAAQ,UAAU,EAAE,QAAQ,WAAU,CAAC,EAAE,WAAW;AAAA,EAC5D,iBAAiB,QAAO,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAAA,EAC7D,MAAM,SAAQ,QAAQ,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EACrD,UAAU,SAAQ,YAAY,EAAE,QAAQ,WAAU,CAAC;AAAA,EACnD,QAAQ,SAAQ,UAAU,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EACzD,QAAQ,KAAK,QAAQ,EAAE,MAAM,EAAE,QAAQ;AACxC,CAAC;;;ACzCD,iBAAS,aAAM,WAAI;AACnB,mBAAS,2BAAe,qBAAS;AAIjC,IAAM,aAAY;AAClB,IAAM,YAAY;AAClB,IAAM,cAAc;AAGb,IAAM,mBAAmB,SAAQ,qBAAqB;AAAA,EAC5D,OAAO,QAAO,SAAS,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnD,IAAI,SAAQ,MAAM,EAAE,QAAQ,WAAU,CAAC,EAAE,WAAW;AAAA,EACpD,IAAI,SAAQ,MAAM,EAAE,QAAQ,UAAU,CAAC;AAAA,EACvC,eAAe,MAAM,eAAe,EAAE,MAA+B;AAAA,EACrE,iBAAiB,SAAQ,mBAAmB,EAAE,QAAQ,WAAU,CAAC;AAAA,EACjE,MAAM,SAAQ,QAAQ,EAAE,QAAQ,YAAY,CAAC,EAAE,QAAQ;AAAA,EACvD,SAAS,SAAQ,WAAW,EAAE,QAAQ,WAAU,CAAC;AAClD,CAAC;;;AClBD,eAAS;AACT,mBAAS,oBAAQ,qBAAS,kBAAS,kBAAM;AASzC,IAAM,eAAe;AACrB,IAAM,aAAY;AAClB,IAAM,gBAAgB;AACtB,IAAM,oBAAoB;AAEnB,IAAM,mBAAmB,SAAQ,oBAAoB;AAAA,EAC3D,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,OAAO,SAAQ,SAAS,EAAE,QAAQ,aAAa,CAAC,EAAE,WAAW;AAAA,EAC7D,gBAAgB,SAAQ,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACjE,iBAAiB,SAAQ,mBAAmB,EAAE,QAAQ,WAAU,CAAC;AAAA,EACjE,eAAe,MAAK,eAAe,EAAE,QAAQ;AAAA,EAC7C,QAAQ,SAAQ,UAAU,EAAE,QAAQ,cAAc,CAAC,EACjD,QAAQ,EACR,QAAQ,QAAQ;AAAA,EAClB,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,SAAS,SAAQ,WAAW,EAAE,QAAQ,WAAU,CAAC;AAClD,CAAC;AAED,IAAM,mBAAmB,CAAC,SACzB,SAAQ,MAAM;AAAA,EACb,OAAO,SAAQ,SAAS,EAAE,QAAQ,aAAa,CAAC,EAAE,QAAQ;AAAA,EAC1D,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,YAAY,SAAQ,cAAc;AAAA,IACjC,QAAQ;AAAA,EACT,CAAC,EAAE,WAAW;AACf,CAAC;AAEK,IAAM,6BAA6B,iBACzC,8BACD;AACO,IAAM,oCAAoC,iBAChD,qCACD;;;AC1CA,gBAAS,YAAK;AACd,oBAAS,qBAAS;AAKlB,IAAM,aAAY;AAEX,IAAM,gBAAgB,SAAQ,qBAAqB;AAAA,EACzD,IAAI,SAAQ,MAAM,EAAE,QAAQ,WAAU,CAAC,EAAE,WAAW;AAAA,EACpD,UAAU,SAAQ,YAAY,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EAC7D,aAAa,SAAQ,eAAe,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EACnE,eAAe,SAAQ,iBAAiB,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EACvE,YAAY,SAAQ,cAAc,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EACjE,kBAAkB,SAAQ,oBAAoB,EAAE,QAAQ,WAAU,CAAC;AAAA,EACnE,cAAc,SAAQ,gBAAgB,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AACtE,CAAC;;;ACVD,iBAAS;AACT,iBAAS,aAAM;AACf,oBAAS;AACT;AAAA,WAEC;AAAA,aACA;AAAA,UACA;AAAA;AAAA,aAEA;AAAA;;;ACZD,IAAI,sBAAsB;AAG1B,IAAI,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6G1B,IAAI,kBAAkB,CAAC,cAAc;AACrC,IAAI,YAAY,gBAAgB;AAAA,EAC9B,MAAM;AAAA,IACJ,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,eAAe;AAAA,IACb,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK,CAAC,WAAW,WAAW,OAAO;AAAA,IACrC;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,KAAK,CAAC,WAAW,WAAW,OAAO;AAAA,IACrC;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK,CAAC,WAAW,WAAW,OAAO;AAAA,IACrC;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,MAAM;AAAA,QACJ,OAAO;AAAA,MACT;AAAA,MACA,UAAU;AAAA,MACV,SAAS;AAAA,QACP,QAAQ;AAAA,QACR,gBAAgB;AAAA,MAClB;AAAA,MACA,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ,UAAU,IAAI;AAAA,IAChC,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,kBAAkB;AAAA,IAClB,oCAAoC;AAAA,MAClC,UAAU;AAAA,IACZ;AAAA,IACA,OAAO,CAAC,OAAO;AAAA,IACf,UAAU,CAAC,MAAM;AAAA,IACjB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,SAAS;AAAA,IACnB,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,YAAY;AAAA,IACtB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,cAAc;AAAA,IACxB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,kBAAkB,CAAC,WAAW,WAAW,OAAO;AAAA,IAChD,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK,CAAC,WAAW,WAAW,OAAO;AAAA,IACrC;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,MAAM,IAAI,gBAAgB;AAAA,QACxB,iBAAiB;AAAA,MACnB,CAAC;AAAA,MACD,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,KAAK,CAAC,WAAW,WAAW,OAAO;AAAA,IACrC;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK,CAAC,WAAW,WAAW,OAAO;AAAA,IACrC;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,kBAAkB,CAAC,WAAW,WAAW,OAAO;AAAA,IAChD,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK,CAAC,WAAW,WAAW,OAAO;AAAA,IACrC;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK,CAAC,WAAW,WAAW,OAAO;AAAA,IACrC;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,kBAAkB;AAAA,IAClB,OAAO,CAAC,OAAO;AAAA,IACf,YAAY,CAAC,aAAa;AAAA,IAC1B,UAAU,CAAC,MAAM;AAAA,IACjB,WAAW,CAAC,YAAY;AAAA,IACxB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,SAAS;AAAA,IACnB,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,kBAAkB;AAAA,IAClB,UAAU,CAAC,cAAc;AAAA,IACzB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,SAAS,UAAU,MAAM;AAAA,IACnC,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,MAAM;AAAA,IAChB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH,kBAAkB;AAAA,IAClB,OAAO,CAAC,OAAO;AAAA,IACf,UAAU,CAAC,MAAM;AAAA,IACjB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,YAAY;AAAA,IACtB,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,SAAS;AAAA,QACP,aAAa;AAAA,MACf;AAAA,MACA,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,YAAY,cAAc;AAAA,IACpC,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ,IAAI;AAAA,IACtB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,kBAAkB;AAAA,IAClB,OAAO,CAAC,OAAO;AAAA,IACf,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ;AAAA,IAClB,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,kBAAkB;AAAA,IAClB,OAAO,CAAC,QAAQ,OAAO;AAAA,IACvB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ,QAAQ;AAAA,IAC1B,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ,IAAI;AAAA,IACtB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,kBAAkB;AAAA,IAClB,OAAO,CAAC,OAAO;AAAA,IACf,YAAY,CAAC,QAAQ,SAAS;AAAA,IAC9B,UAAU,CAAC,QAAQ,cAAc;AAAA,IACjC,WAAW,CAAC,QAAQ,YAAY;AAAA,IAChC,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,YAAY;AAAA,IACtB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,YAAY;AAAA,IACtB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,WAAW,KAAK,SAAS;AAAA,IACnC,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,kBAAkB;AAAA,IAClB,OAAO,CAAC,OAAO;AAAA,IACf,YAAY,CAAC,aAAa;AAAA,IAC1B,UAAU,CAAC,MAAM;AAAA,IACjB,WAAW,CAAC,YAAY;AAAA,IACxB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,SAAS;AAAA,IACnB,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,cAAc,CAAC,CAAC,UAAU,uBAAuB,CAAC;AAAA,MAClD,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,KAAK;AAAA,IACf,iBAAiB;AAAA,MACf,SAAS,CAAC,KAAK;AAAA,MACf,SAAS,CAAC,IAAI;AAAA,IAChB;AAAA,IACA,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,kBAAkB;AAAA,IAClB,OAAO,CAAC,OAAO;AAAA,IACf,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,SAAS;AAAA,IACnB,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,kBAAkB,CAAC,WAAW,GAAG,OAAO;AAAA,IACxC,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK,CAAC,WAAW,GAAG,OAAO;AAAA,IAC7B;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK,CAAC,WAAW,GAAG,OAAO;AAAA,IAC7B;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,kBAAkB;AAAA,IAClB,OAAO,CAAC,OAAO;AAAA,IACf,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,YAAY;AAAA,IACtB,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,kBAAkB,CAAC,WAAW,GAAG,OAAO;AAAA,IACxC,OAAO,CAAC,OAAO;AAAA,IACf,UAAU,CAAC,MAAM;AAAA,IACjB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,SAAS;AAAA,IACnB,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,KAAK,CAAC,WAAW,GAAG,OAAO;AAAA,IAC7B;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK,CAAC,WAAW,GAAG,OAAO;AAAA,IAC7B;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,kBAAkB;AAAA,IAClB,OAAO,CAAC,OAAO;AAAA,IACf,YAAY,CAAC,aAAa;AAAA,IAC1B,UAAU,CAAC,MAAM;AAAA,IACjB,WAAW,CAAC,YAAY;AAAA,IACxB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,SAAS;AAAA,IACnB,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,KAAK;AAAA,IACf,iBAAiB;AAAA,MACf,SAAS,CAAC,KAAK;AAAA,MACf,SAAS,CAAC,KAAK;AAAA,IACjB;AAAA,IACA,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ;AAAA,IAClB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK,CAAC,WAAW,OAAO,gBAAgB,eAAe,oEAAoE;AAAA,IAC7H;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,SAAS,CAAC,YAAY;AAAA,QACpB,eAAe,SAAS,aAAa,GAAG,OAAO,YAAY,OAAO,cAAc;AAAA,MAClF;AAAA,MACA,gBAAgB;AAAA,MAChB,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,SAAS;AAAA,IACnB,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,kBAAkB,CAAC,WAAW,GAAG,OAAO;AAAA,IACxC,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,KAAK,CAAC,WAAW,GAAG,OAAO;AAAA,IAC7B;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK,CAAC,WAAW,GAAG,OAAO;AAAA,IAC7B;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,kBAAkB;AAAA,IAClB,OAAO,CAAC,QAAQ,OAAO;AAAA,IACvB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ,iBAAiB;AAAA,IACnC,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ,SAAS;AAAA,IAC3B,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,MAAM;AAAA,QACJ,OAAO;AAAA,MACT;AAAA,MACA,UAAU;AAAA,MACV,SAAS;AAAA,QACP,QAAQ;AAAA,QACR,gBAAgB;AAAA,MAClB;AAAA,MACA,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ,UAAU,IAAI;AAAA,IAChC,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,kBAAkB,CAAC,WAAW,GAAG,OAAO;AAAA,IACxC,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ;AAAA,IAClB,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK,CAAC,WAAW,GAAG,OAAO;AAAA,IAC7B;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,KAAK,CAAC,WAAW,GAAG,OAAO;AAAA,IAC7B;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK,CAAC,WAAW,GAAG,OAAO;AAAA,IAC7B;AAAA,EACF;AAAA,EACA,cAAc;AAAA,IACZ,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,kBAAkB;AAAA,IAChB,kBAAkB,CAAC,WAAW,WAAW,OAAO,yBAAyB,OAAO;AAAA,IAChF,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK,CAAC,WAAW,WAAW,OAAO,yBAAyB,OAAO;AAAA,IACrE;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK,CAAC,WAAW,WAAW,OAAO,yBAAyB,OAAO;AAAA,IACrE;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,MAAM;AAAA,QACJ,OAAO;AAAA,MACT;AAAA,MACA,UAAU;AAAA,MACV,SAAS;AAAA,QACP,gBAAgB;AAAA,MAClB;AAAA,MACA,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ,MAAM,IAAI;AAAA,IAC5B,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,kBAAkB;AAAA,IAClB,OAAO,CAAC,YAAY,OAAO;AAAA,IAC3B,UAAU,CAAC,YAAY,MAAM;AAAA,IAC7B,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,YAAY,eAAe;AAAA,IACrC,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,YAAY,IAAI;AAAA,IAC1B,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,kBAAkB;AAAA,IAClB,OAAO,CAAC,OAAO,SAAS,QAAQ,UAAU,OAAO;AAAA,IACjD,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,OAAO,SAAS,QAAQ,YAAY;AAAA,IAC9C,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,SAAS;AAAA,QACP,kBAAkB;AAAA,MACpB;AAAA,MACA,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,OAAO,SAAS,QAAQ,IAAI;AAAA,IACtC,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,kBAAkB,CAAC,WAAW,WAAW,OAAO;AAAA,IAChD,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK,CAAC,WAAW,WAAW,OAAO;AAAA,IACrC;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,KAAK,CAAC,WAAW,WAAW,OAAO;AAAA,IACrC;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK,CAAC,WAAW,WAAW,OAAO;AAAA,IACrC;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,YAAY;AAAA,IACtB,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ,IAAI;AAAA,IACtB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ,IAAI;AAAA,IACtB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,WAAW;AAAA,IACrB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,cAAc;AAAA,IACZ,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,WAAW;AAAA,IACrB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,MAAM,IAAI,gBAAgB;AAAA,QACxB,iBAAiB;AAAA,MACnB,CAAC;AAAA,MACD,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,SAAS;AAAA,IACnB,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,kBAAkB;AAAA,IAClB,OAAO,CAAC,QAAQ,eAAe,OAAO;AAAA,IACtC,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,MAAM;AAAA,QACJ,OAAO;AAAA,MACT;AAAA,MACA,UAAU;AAAA,MACV,SAAS;AAAA,QACP,QAAQ;AAAA,QACR,gBAAgB;AAAA,MAClB;AAAA,MACA,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ,eAAe,IAAI;AAAA,IACrC,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,kBAAkB;AAAA,IAClB,YAAY,CAAC,UAAU;AAAA,IACvB,WAAW,CAAC,WAAW;AAAA,IACvB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,SAAS;AAAA,IACnB,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,MAAM,IAAI,gBAAgB;AAAA,QACxB,iBAAiB;AAAA,MACnB,CAAC;AAAA,MACD,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,kBAAkB,CAAC,WAAW,GAAG,OAAO,6CAA6C,OAAO,4CAA4C,OAAO;AAAA,IAC/I,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK,CAAC,WAAW,GAAG,OAAO,gDAAgD,OAAO,yBAAyB,OAAO;AAAA,IACpH;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ,IAAI;AAAA,IACtB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK,CAAC,WAAW,GAAG,OAAO,mDAAmD,OAAO,0BAA0B,OAAO;AAAA,IACxH;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,kBAAkB;AAAA,IAClB,oCAAoC,CAAC,YAAY;AAAA,MAC/C,YAAY,OAAO;AAAA,IACrB;AAAA,IACA,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ,SAAS;AAAA,IAC3B,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ,IAAI;AAAA,IACtB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,YAAY,QAAQ,MAAM;AAAA,IACpC,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,SAAS,CAAC,YAAY;AAAA,QACpB,aAAa,OAAO;AAAA,MACtB;AAAA,MACA,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,SAAS,CAAC,YAAY;AAAA,QACpB,aAAa,OAAO;AAAA,MACtB;AAAA,MACA,gBAAgB;AAAA,MAChB,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ,IAAI;AAAA,IACtB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,IAAI;AAAA,IACF,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,YAAY,KAAK,IAAI;AAAA,IAC/B,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,MAAM,OAAO,WAAW;AAAA,QACtB,MAAM,QAAQ,MAAM,iBAAiB,MAAM;AAAA,QAC3C,IAAI,UAAU;AAAA,UACZ,MAAM,IAAI,MAAM,0CAA0C;AAAA,QAC5D,QAAQ,OAAO,oBAAoB;AAAA,QACnC,OAAO;AAAA,UACL,CAAC,UAAU,SAAS;AAAA,UACpB,CAAC,SAAS,KAAK;AAAA,UACf,CAAC,aAAa,OAAO,QAAQ;AAAA,UAC7B,CAAC,aAAa,eAAe;AAAA,QAC/B;AAAA;AAAA,MAEF,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,wBAAwB;AAAA,MACtB,QAAQ;AAAA,IACV;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,MAAM,OAAO,WAAW;AAAA,QACtB,MAAM,QAAQ,MAAM,iBAAiB,MAAM;AAAA,QAC3C,IAAI,CAAC;AAAA,UACH,MAAM,IAAI,MAAM,8BAA8B;AAAA,QAChD,QAAQ,OAAO,oBAAoB;AAAA,QACnC,OAAO;AAAA,UACL,CAAC,UAAU,QAAQ;AAAA,UACnB,CAAC,aAAa,OAAO,QAAQ;AAAA,UAC7B,CAAC,SAAS,KAAK;AAAA,UACf,CAAC,aAAa,eAAe;AAAA,QAC/B;AAAA;AAAA,MAEF,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ;AAAA,IAClB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,IACA,+BAA+B;AAAA,MAC7B,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,kBAAkB,CAAC,WAAW,WAAW,OAAO;AAAA,IAChD,oCAAoC,MAAM;AAAA,MACxC,MAAM,QAAQ,OAAO,WAAW;AAAA,MAChC,OAAO;AAAA,QACL;AAAA,MACF;AAAA;AAAA,IAEF,OAAO,CAAC,OAAO;AAAA,IACf,YAAY,CAAC,aAAa;AAAA,IAC1B,UAAU,CAAC,MAAM;AAAA,IACjB,WAAW,CAAC,YAAY;AAAA,IACxB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK,CAAC,WAAW,WAAW,OAAO;AAAA,IACrC;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK,CAAC,WAAW,WAAW,OAAO;AAAA,IACrC;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,kBAAkB;AAAA,IAClB,oCAAoC;AAAA,MAClC,WAAW,OAAO,WAAW;AAAA,MAC7B,aAAa,GAAG,UAAU,YAAY,qBAAqB,UAAU,UAAU,MAAM,GAAG,EAAE,MAAM,IAAI,MAAM,GAAG,EAAE,IAAI,KAAK;AAAA,IAC1H;AAAA,IACA,OAAO,CAAC,eAAe;AAAA,IACvB,YAAY,CAAC,WAAW;AAAA,IACxB,UAAU,CAAC,WAAW;AAAA,IACtB,WAAW,CAAC,YAAY;AAAA,IACxB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,kBAAkB,CAAC,WAAW,yBAAyB,OAAO,UAAU;AAAA,IACxE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK,CAAC,WAAW,yBAAyB,OAAO,UAAU;AAAA,IAC7D;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,KAAK,CAAC,WAAW,yBAAyB,OAAO,UAAU;AAAA,IAC7D;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,MAAM;AAAA,IAChB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK,CAAC,WAAW,yBAAyB,OAAO,UAAU;AAAA,IAC7D;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,kBAAkB;AAAA,IAClB,OAAO,CAAC,OAAO;AAAA,IACf,YAAY,CAAC,WAAW;AAAA,IACxB,WAAW,CAAC,YAAY;AAAA,IACxB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,SAAS;AAAA,IACnB,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,SAAS,CAAC,YAAY;AAAA,QACpB,eAAe,SAAS,KAAK,GAAG,OAAO,YAAY,OAAO,cAAc;AAAA,MAC1E;AAAA,MACA,gBAAgB;AAAA,MAChB,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AACF,CAAC;AAwBD,IAAI,uBAAuB,CAAC,WAAW;AAAA,EACrC,IAAI,CAAC,sBAAsB,MAAM;AAAA,IAC/B,OAAO;AAAA,EACT,MAAM,WAAW,UAAU;AAAA,EAC3B,OAAO,SAAS;AAAA;AAElB,IAAI,uBAAuB,CAAC,WAAW;AAAA,EACrC,IAAI,CAAC,sBAAsB,MAAM;AAAA,IAC/B,OAAO;AAAA,EACT,MAAM,WAAW,UAAU;AAAA,EAC3B,OAAO,SAAS,eAAe;AAAA;AAGjC,IAAI,8BAA8B,CAAC,WAAW;AAAA,EAC5C,IAAI,CAAC,sBAAsB,MAAM;AAAA,IAC/B,OAAO;AAAA,EACT,MAAM,WAAW,UAAU;AAAA,EAC3B,OAAO,SAAS;AAAA;AAGlB,IAAI,4BAA4B,CAAC,WAAW;AAAA,EAC1C,IAAI,CAAC,sBAAsB,MAAM;AAAA,IAC/B,OAAO;AAAA,EACT,MAAM,WAAW,UAAU;AAAA,EAC3B,OAAO,SAAS,sBAAsB;AAAA;AAExC,IAAI,gCAAgC,CAAC,WAAW;AAAA,EAC9C,IAAI,CAAC,sBAAsB,MAAM;AAAA,IAC/B,OAAO;AAAA,EACT,MAAM,WAAW,UAAU;AAAA,EAC3B,OAAO,SAAS;AAAA;AAElB,IAAI,wBAAwB,CAAC,WAAW,OAAO,OAAO,WAAW,MAAM;AAiFvE,IAAI,eAAe,CAAC,UAAU;AAAA,EAC5B,IAAI;AAAA,EACJ,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B,MAAM;AAAA,EACR,EAAO;AAAA,IACL,MAAM,QAAQ,iBAAiB,aAAa,QAAQ,IAAI,WAAW,KAAK;AAAA,IACxE,MAAM,MAAM,OAAO,CAAC,KAAK,SAAS,MAAM,OAAO,aAAa,IAAI,GAAG,EAAE;AAAA;AAAA,EAEvE,OAAO,KAAK,GAAG;AAAA;AAEjB,IAAI,mBAAmB,OAAO,WAAW;AAAA,EACvC,MAAM,YAAY,KAAK,MAAM,KAAK,IAAI,IAAI,IAAI;AAAA,EAC9C,MAAM,YAAY,YAAY,OAAO,YAAY;AAAA,EACjD,MAAM,kBAAkB,MAAM,WAAW,WAAW,OAAO,YAAY;AAAA,EACvE,MAAM,WAAW,IAAI,IAAI,0CAA0C;AAAA,EACnE,SAAS,aAAa,IAAI,UAAU,UAAU;AAAA,EAC9C,SAAS,aAAa,IAAI,aAAa,OAAO,QAAQ;AAAA,EACtD,SAAS,aAAa,IAAI,aAAa,UAAU,SAAS,CAAC;AAAA,EAC3D,SAAS,aAAa,IAAI,aAAa,eAAe;AAAA,EACtD,MAAM,cAAc,SAAS,SAAS;AAAA,EACtC,MAAM,gBAAgB,MAAM,MAAM,aAAa;AAAA,OAC1C,UAAU,WAAW;AAAA,IACxB,QAAQ;AAAA,EACV,CAAC;AAAA,EACD,MAAM,YAAY,MAAM,cAAc,KAAK;AAAA,EAC3C,IAAI,UAAU,WAAW,GAAG;AAAA,IAC1B,OAAO;AAAA,MACL;AAAA,MACA,OAAO,UAAU,KAAK;AAAA,IACxB;AAAA,EACF;AAAA,EACA;AAAA;AAEF,IAAI,YAAY,CAAC,QAAQ;AAAA,EACvB,MAAM,OAAO,IAAI,WAAW,UAAU,IAAI,EAAE,UAAU,QAAQ,IAAI,CAAC;AAAA,EACnE,OAAO;AAAA;AAET,IAAI,aAAa,OAAO,SAAS,WAAW;AAAA,EAC1C,MAAM,UAAU,IAAI;AAAA,EACpB,MAAM,MAAM,MAAM,OAAO,OAAO,UAAU,OAAO,QAAQ,OAAO,MAAM,GAAG,EAAE,MAAM,WAAW,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;AAAA,EAC3H,MAAM,YAAY,MAAM,OAAO,OAAO,KAAK,QAAQ,KAAK,QAAQ,OAAO,OAAO,CAAC;AAAA,EAC/E,OAAO,MAAM,KAAK,IAAI,WAAW,SAAS,CAAC,EAAE,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AAAA;AAoDxG,IAAI,iCAAiC,CAAC,WAAW,MAAM;AAAA,EACrD,MAAM,SAAS,OAAO,gBAAgB,IAAI,WAAW,MAAM,CAAC;AAAA,EAC5D,OAAO,UAAU,MAAM;AAAA;AAEzB,IAAI,uBAAuB,+BAA+B,mBAAmB;AAC7E,IAAI,gBAAgB,+BAA+B,mBAAmB;AACtE,IAAI,YAAY,CAAC,UAAU,aAAa,KAAK,EAAE,QAAQ,OAAO,GAAG,EAAE,QAAQ,OAAO,GAAG,EAAE,QAAQ,OAAO,EAAE;AA4OxG,IAAI,sBAAsB,OAAO,KAAK,SAAS,EAAE,OAAO,oBAAoB;AAC5E,IAAI,sBAAsB,OAAO,KAAK,SAAS,EAAE,OAAO,oBAAoB;AAC5E,IAAI,kBAAkB,OAAO,KAAK,SAAS,EAAE,OAAO,qBAAqB;AACzE,IAAI,6BAA6B,OAAO,KAAK,SAAS,EAAE,OAAO,2BAA2B;AAC1F,IAAI,2BAA2B,OAAO,KAAK,SAAS,EAAE,OAAO,yBAAyB;AACtF,IAAI,+BAA+B,OAAO,KAAK,SAAS,EAAE,OAAO,6BAA6B;;;AD3wEvF,IAAM,8BAA8B,SAAQ,4BAA4B;AAAA,EAC9E,kBAAkB,OAAM,kBAAkB,EACxC,MAAgB,EAChB,QAAQ,EACR,QAAQ,CAAC,CAAC;AAAA,EACZ,cAAc,OAAM,cAAc,EAAE,MAAgB,EAAE,QAAQ,CAAC,CAAC;AAAA,EAChE,oBAAoB,SAAQ,sBAAsB,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ;AAAA,EAC1E,YAAY,UAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EACzD,OAAO,SAAQ,SAAS,EAAE,QAAQ,IAAI,CAAC;AAAA,EACvC,qBAAqB,SAAQ,uBAAuB;AAAA,IACnD,QAAQ;AAAA,EACT,CAAC,EAAE,QAAQ;AAAA,EACX,uBAAuB,SAAQ,yBAAyB;AAAA,IACvD,QAAQ;AAAA,EACT,CAAC,EAAE,QAAQ;AAAA,EACX,UAAU,SAAQ,YAAY,EAAE,QAAQ,IAAI,CAAC,EAAE,QAAQ;AAAA,EACvD,IAAI,SAAQ,MAAM,EAAE,QAAQ,IAAI,CAAC,EAAE,WAAW;AAAA,EAC9C,OAAO,SAAQ,SAAS,EAAE,QAAQ,IAAI,CAAC;AAAA,EACvC,UAAU,OAAM,UAAU,EAAE,MAA+B,EAAE,QAAQ,CAAC,CAAC;AAAA,EACvE,QAAQ,SAAQ,UAAU,EAAE,QAAQ,GAAG,CAAC,EACtC,MAAuC,EACvC,QAAQ;AAAA,EACV,YAAY,UAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EACzD,UAAU,SAAQ,YAAY,EAAE,QAAQ,IAAI,CAAC;AAC9C,CAAC;AACM,IAAM,4BAA4B,SAAQ,0BAA0B;AAAA,EAC1E,yBAAyB,MAAK,yBAAyB;AAAA,EACvD,mBAAmB,SAAQ,qBAAqB,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ;AAAA,EACxE,YAAY,UAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EACzD,YAAY,UAAU,YAAY;AAAA,EAClC,gBAAgB,OAAM,gBAAgB,EACpC,MAAgB,EAChB,QAAQ,EACR,QAAQ,CAAC,CAAC;AAAA,EACZ,IAAI,SAAQ,MAAM,EAAE,QAAQ,IAAI,CAAC,EAAE,WAAW;AAAA,EAC9C,oBAAoB,MAAK,oBAAoB;AAAA,EAC7C,mBAAmB,UAAU,mBAAmB;AAAA,EAChD,UAAU,OAAM,UAAU,EAAE,MAA+B,EAAE,QAAQ,CAAC,CAAC;AAAA,EACvE,WAAW,SAAQ,aAAa,EAAE,QAAQ,IAAI,CAAC,EAAE,QAAQ;AAAA,EACzD,iBAAiB,SAAQ,mBAAmB,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ;AAAA,EACpE,kBAAkB,SAAQ,oBAAoB,EAAE,QAAQ,IAAI,CAAC,EAAE,QAAQ;AAAA,EACvE,0BAA0B,MAAK,0BAA0B;AAAA,EACzD,QAAQ,SAAQ,UAAU,EAAE,QAAQ,GAAG,CAAC,EACtC,MAAqC,EACrC,QAAQ;AAAA,EACV,YAAY,SAAQ,cAAc,EAAE,QAAQ,GAAG,CAAC;AAAA,EAChD,YAAY,UAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAC1D,CAAC;;;AEnED,eAAS;AACT,mBAAS,6BAAiB,qBAAS;AAInC,IAAM,aAAa;AAEZ,IAAM,gBAAgB,SAAQ,iBAAiB;AAAA,EACrD,iBAAiB,QAAQ,iBAAiB,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA,EAC/D,KAAK,SAAQ,OAAO,EAAE,QAAQ,WAAW,CAAC,EAAE,WAAW;AAAA,EACvD,iBAAiB,QAAO,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAAA,EAC7D,sBAAsB,QAAO,wBAAwB;AAAA,IACpD,MAAM;AAAA,EACP,CAAC,EAAE,QAAQ;AACZ,CAAC;;;ACdD,eAAS;AACT;AAAA,YACC;AAAA,aACA;AAAA,WACA;AAAA,aACA;AAAA,UACA;AAAA,aACA;AAAA;AAKD,IAAM,aAAY;AAEX,IAAM,sBAAsB,SAAQ,wBAAwB;AAAA,EAClE,oBAAoB,OAAM,oBAAoB,EAC5C,MAAgB,EAChB,QAAQ,EACR,QAAQ,CAAC,CAAC;AAAA,EACZ,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,iBAAiB,QAAO,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAAA,EAC7D,wBAAwB,MAAK,wBAAwB;AAAA,EACrD,eAAe,SAAQ,eAAe,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EAC/D,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,SAAS,SAAQ,WAAW,EAAE,QAAQ,WAAU,CAAC,EAAE,WAAW;AAC/D,CAAC;;;ACzBD,gBAAS,cAAK,aAAM,eAAQ;AAC5B;AAAA,YACC;AAAA,aACA;AAAA,WACA;AAAA,aACA;AAAA,UACA;AAAA,aACA;AAAA;AA0BD,IAAM,aAAa;AAGnB,IAAM,aAAY;AAEX,IAAM,oCAAoC,SAChD,wCACA;AAAA,EACC,aAAa,SAAQ,eAAe,EAAE,QAAQ,WAAU,CAAC,EAAE,WAAW;AAAA,EACtE,iBAAiB,MAAK,iBAAiB;AAAA,EACvC,WAAW,SAAQ,aAAa,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EAC/D,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,kBAAkB,QAAO,oBAAoB;AAAA,IAC5C,MAAM;AAAA,EACP,CAAC,EAAE,QAAQ;AAAA,EACX,mBAAmB,QAAO,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAAA,EACjE,QAAQ,MAAK,QAAQ,EAAE,MAAM,EAAE,QAAQ;AAAA,EACvC,QAAQ,SAAQ,UAAU,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ;AAAA,EAClD,UAAU,SAAQ,YAAY,EAAE,QAAQ,WAAU,CAAC;AACpD,CACD;AACO,IAAM,gCAAgC,SAC5C,oCACA;AAAA,EACC,WAAW,SAAQ,aAAa,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EAC/D,eAAe,SAAQ,iBAAiB;AAAA,IACvC,QAAQ;AAAA,EACT,CAAC,EAAE,WAAW;AAAA,EACd,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,KAAK,SAAQ,OAAO,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AACpD,CACD;AACO,IAAM,qCAAqC,SACjD,yCACA;AAAA,EACC,WAAW,SAAQ,aAAa,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EAC/D,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,YAAY,SAAQ,cAAc,EAAE,QAAQ,WAAU,CAAC,EAAE,WAAW;AACrE,CACD;AACO,IAAM,oBAAoB,SAAQ,sBAAsB;AAAA,EAC9D,wBAAwB,SAAQ,0BAA0B;AAAA,IACzD,QAAQ;AAAA,EACT,CAAC;AAAA,EACD,WAAW,SAAQ,aAAa,EAAE,QAAQ,WAAU,CAAC,EAAE,WAAW;AAAA,EAClE,eAAe,SAAQ,iBAAiB,EAAE,QAAQ,WAAU,CAAC;AAAA,EAC7D,WAAW,OAAM,WAAW,EAAE,MAAoB;AAAA,EAClD,UAAU,SAAQ,YAAY,EAAE,QAAQ,WAAW,CAAC;AAAA,EACpD,MAAM,SAAQ,QAAQ,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EACrD,2BAA2B,MAAK,2BAA2B,EAAE,MAAM;AAAA,EACnE,eAAe,MAAK,eAAe,EAAE,MAAM,EAAE,QAAQ;AAAA,EACrD,uCAAuC,SACtC,uCACD;AAAA,EACA,+BAA+B,SAAQ,+BAA+B;AAAA,EACtE,QAAQ,MAAK,QAAQ,EAAE,MAAM,EAAE,QAAQ;AACxC,CAAC;AACM,IAAM,kBAAkB,SAAQ,oBAAoB;AAAA,EAC1D,KAAK,SAAQ,OAAO,EAAE,QAAQ,WAAU,CAAC;AAAA,EACzC,aAAa,OAAM,aAAa,EAAE,MAA+B;AAAA,EACjE,WAAW,SAAQ,aAAa,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EAC/D,gBAAgB,SAAQ,kBAAkB,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EACzE,WAAW,SAAQ,aAAa,EAAE,QAAQ,WAAU,CAAC,EAAE,WAAW;AAAA,EAClE,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,UAAU,SAAQ,YAAY,EAAE,QAAQ,WAAU,CAAC;AAAA,EACnD,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,OAAO,SAAQ,SAAS,EAAE,QAAQ,WAAU,CAAC;AAAA,EAC7C,cAAc,SAAQ,gBAAgB,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EACrE,QAAQ,MAAK,QAAQ,EAAE,MAAM,EAAE,QAAQ;AAAA,EACvC,SAAS,SAAQ,WAAW,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAC5D,CAAC;AACM,IAAM,iCAAiC,SAC7C,oCACA;AAAA,EACC,WAAW,SAAQ,aAAa,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EAC/D,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,kBAAkB,SAAQ,oBAAoB;AAAA,IAC7C,QAAQ;AAAA,EACT,CAAC,EAAE,WAAW;AAAA,EACd,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,kBAAkB,QAAO,oBAAoB;AAAA,IAC5C,MAAM;AAAA,EACP,CAAC,EAAE,QAAQ;AAAA,EACX,QAAQ,MAAK,QAAQ,EAAE,MAAM,EAAE,QAAQ;AAAA,EACvC,QAAQ,SAAQ,UAAU,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ;AAAA,EAClD,WAAW,SAAQ,aAAa,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAO;AAAA,EACjE,UAAU,SAAQ,YAAY,EAAE,QAAQ,WAAU,CAAC;AACpD,CACD;AACO,IAAM,gCAAgC,SAC5C,oCACA;AAAA,EACC,YAAY,SAAQ,cAAc,EAAE,QAAQ,WAAU,CAAC,EAAE,WAAW;AACrE,CACD;AACO,IAAM,6BAA6B,SACzC,gCACA;AAAA,EACC,UAAU,QAAO,YAAY,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACzD,WAAW,SAAQ,aAAa,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EAC/D,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,cAAc,SAAQ,gBAAgB,EAAE,QAAQ,WAAW,CAAC,EAAE,QAAQ;AAAA,EACtE,IAAI,SAAQ,MAAM,EAAE,QAAQ,WAAU,CAAC,EAAE,WAAW;AAAA,EACpD,YAAY,MAAK,YAAY;AAAA,EAC7B,aAAa,QAAO,eAAe,EAAE,MAAM,SAAS,CAAC;AAAA,EACrD,cAAc,MAAK,cAAc,EAAE,QAAQ;AAAA,EAC3C,SAAS,SAAQ,WAAW,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAC5D,CACD;AACO,IAAM,wCAAwC,SACpD,4CACA;AAAA,EACC,WAAW,SAAQ,aAAa,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EAC/D,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,aAAa,OAAM,aAAa,EAC9B,MAA8B,EAC9B,QAAQ;AAAA,EACV,kBAAkB,SAAQ,oBAAoB;AAAA,IAC7C,QAAQ;AAAA,EACT,CAAC,EAAE,WAAW;AACf,CACD;AACO,IAAM,0BAA0B,SAAQ,6BAA6B;AAAA,EAC3E,KAAK,SAAQ,OAAO,EAAE,QAAQ,WAAU,CAAC;AAAA,EACzC,aAAa,OAAM,aAAa,EAAE,MAA+B;AAAA,EACjE,WAAW,SAAQ,aAAa,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EAC/D,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,UAAU,SAAQ,YAAY,EAAE,QAAQ,WAAU,CAAC;AAAA,EACnD,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,QAAQ,MAAK,QAAQ,EAAE,MAAM,EAAE,QAAQ;AAAA,EACvC,YAAY,SAAQ,cAAc,EAAE,QAAQ,WAAU,CAAC,EAAE,WAAW;AAAA,EACpE,SAAS,SAAQ,WAAW,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAC5D,CAAC;;;ACvKD,gBAAS,YAAK;AACd;AAAA,YACC;AAAA,WACA;AAAA,aACA;AAAA,gBACA;AAAA,aACA;AAAA;AAYD,IAAM,aAAY;AAClB,IAAM,cAAc;AACpB,IAAM,eAAe;AAEd,IAAM,+BAA+B,UAC3C,iCACA;AAAA,EACC,gBAAgB,QAAO,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAAA,EAC3D,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,OAAO,UAAQ,SAAS,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EACvD,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,eAAe,UAAQ,iBAAiB;AAAA,IACvC,QAAQ;AAAA,EACT,CAAC,EAAE,WAAW;AAAA,EACd,iBAAiB,UAAQ,mBAAmB,EAAE,QAAQ,WAAU,CAAC;AAAA,EACjE,iBAAiB,UAAQ,mBAAmB;AAAA,IAC3C,QAAQ;AAAA,EACT,CAAC,EAAE,QAAQ;AAAA,EACX,OAAO,OAAM,OAAO,EAAE,MAAgB,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAAA,EAC5D,OAAO,UAAQ,SAAS,EAAE,QAAQ,aAAa,CAAC,EAC9C,MAAuB,EACvB,QAAQ,EACR,QAAQ,SAAS;AAAA,EACnB,YAAY,UAAQ,cAAc,EAAE,QAAQ,WAAU,CAAC,EACrD,QAAQ,EACR,OAAO;AACV,CACD;AACO,IAAM,+BAA+B,UAC3C,iCACA;AAAA,EACC,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,iBAAiB,UAAQ,mBAAmB;AAAA,IAC3C,QAAQ;AAAA,EACT,CAAC,EAAE,QAAQ;AAAA,EACX,OAAO,OAAM,OAAO,EAAE,MAAgB,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAAA,EAC5D,QAAQ,UAAQ,UAAU,EAAE,QAAQ,aAAa,CAAC,EAChD,MAAwB,EACxB,QAAQ,EACR,QAAQ,QAAQ;AAAA,EAClB,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,SAAS,UAAQ,WAAW,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAC5D,GACA,CAAC,UAAU,CAAC,YAAW,EAAE,SAAS,CAAC,MAAM,iBAAiB,MAAM,OAAO,EAAE,CAAC,CAAC,CAC5E;AACO,IAAM,qBAAqB,UAAQ,sBAAsB;AAAA,EAC/D,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,UAAU,OAAM,UAAU,EAAE,MAA+B;AAAA,EAC3D,MAAM,UAAQ,QAAQ,EAAE,QAAQ,YAAY,CAAC,EAAE,QAAQ;AAAA,EACvD,iBAAiB,UAAQ,mBAAmB;AAAA,IAC3C,QAAQ;AAAA,EACT,CAAC,EAAE,WAAW;AAAA,EACd,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AACpE,CAAC;;;ACvED,eAAS;AACT,mBAAS,oBAAQ,sBAAS;AAI1B,IAAM,aAAY;AAEX,IAAM,0BAA0B,UAAQ,4BAA4B;AAAA,EAC1E,OAAO,UAAQ,SAAS,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EACvD,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,YAAY,UAAQ,cAAc,EAAE,QAAQ,WAAU,CAAC,EAAE,WAAW;AACrE,CAAC;;;ACXD,eAAS;AACT,mBAAS,mBAAQ,mBAAO,sBAAS;AAIjC,IAAM,cAAY;AAEX,IAAM,qBAAqB,UAAQ,uBAAuB;AAAA,EAChE,cAAc,OAAM,cAAc,EAChC,MAAyB,EACzB,QAAQ,EACR,QAAQ,CAAC,CAAC;AAAA,EACZ,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,YAAY,UAAQ,cAAc,EAAE,QAAQ,YAAU,CAAC;AAAA,EACvD,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,iBAAiB,UAAQ,mBAAmB;AAAA,IAC3C,QAAQ;AAAA,EACT,CAAC,EAAE,QAAQ;AAAA,EACX,kBAAkB,UAAQ,oBAAoB;AAAA,IAC7C,QAAQ;AAAA,EACT,CAAC,EAAE,WAAW;AAAA,EACd,YAAY,UAAQ,cAAc,EAAE,QAAQ,YAAU,CAAC,EAAE,QAAQ,EAAE,OAAO;AAC3E,CAAC;;;ACtBD,gBAAS,YAAK;AACd;AAAA,YACC;AAAA,WACA;AAAA,aACA;AAAA,gBACA;AAAA,aACA;AAAA;AAKD,IAAM,cAAY;AAClB,IAAM,cAAc;AAGpB,IAAM,eAAe;AAEd,IAAM,aAAa,UACzB,cACA;AAAA,EACC,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,iBAAiB,UAAQ,mBAAmB,EAAE,QAAQ,YAAU,CAAC,EAC/D,QAAQ,EACR,QAAQ,YAAY;AAAA,EACtB,aAAa,OAAM,aAAa,EAC9B,MAAgB,EAChB,QAAQ,EACR,QAAQ,CAAC,CAAC;AAAA,EACZ,MAAM,UAAQ,QAAQ,EAAE,QAAQ,YAAY,CAAC,EAAE,QAAQ;AAAA,EACvD,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AACpE,GACA,CAAC,UAAU,CAAC,YAAW,EAAE,SAAS,CAAC,MAAM,iBAAiB,MAAM,IAAI,EAAE,CAAC,CAAC,CACzE;;;AChCA,iBAAS,aAAM;AACf,mBAAS,qBAAQ,sBAAS;AAI1B,IAAM,cAAY;AAEX,IAAM,kBAAkB,UAAQ,oBAAoB;AAAA,EAC1D,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,cAAc,UAAQ,gBAAgB,EAAE,QAAQ,YAAU,CAAC,EAAE,QAAQ;AAAA,EACrE,iBAAiB,SAAO,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAAA,EAC7D,iBAAiB,UAAQ,mBAAmB;AAAA,IAC3C,QAAQ;AAAA,EACT,CAAC,EAAE,QAAQ;AAAA,EACX,UAAU,UAAQ,YAAY,EAAE,QAAQ,YAAU,CAAC,EAAE,WAAW;AACjE,CAAC;;;ACfD,iBAAS;AACT,eAAS;AACT,oBAAS;AACT;AAAA,YAEC;AAAA,WACA;AAAA,aACA;AAAA,UACA;AAAA,eACA;AAAA,aACA;AAAA;AAMM,IAAM,oBAAoB,UAAQ,iBAAiB;AAAA,EACzD,cAAc,MAAK,cAAc;AAAA,EACjC,qBAAqB,SAAO,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAAA,EACrE,YAAY,WAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EACzD,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,IAAI,UAAQ,MAAM,EAAE,QAAQ,IAAI,CAAC,EAAE,WAAW;AAAA,EAC9C,eAAe,MAAK,eAAe;AAAA,EACnC,YAAY,WAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EACzD,WAAW,OAAM,WAAW,EAAE,MAA+B,EAAE,QAAQ;AACxE,CAAC;AAEM,IAAM,gCAAgC,UAC5C,8BACA;AAAA,EACC,cAAc,MAAK,cAAc;AAAA,EACjC,YAAY,WAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EACzD,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,IAAI,UAAQ,MAAM,EAAE,QAAQ,IAAI,CAAC,EAAE,WAAW;AAAA,EAC9C,eAAe,MAAK,eAAe;AAAA,EACnC,0BAA0B,OAAM,0BAA0B,EAAE,MAE1D;AAAA,EACF,YAAY,WAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EACzD,oBACC,OAAM,oBAAoB,EAAE,MAA+B;AAC7D,CACD;;;AC1CA,eAAS;AACT,mBAAS,qBAAQ,mBAAS,kBAAM;AAIhC,IAAM,cAAY;AAClB,IAAM,cAAa;AAEZ,IAAM,4BAA4B,UACxC,+BACA;AAAA,EACC,SAAS,UAAQ,WAAW,EAAE,QAAQ,YAAW,CAAC,EAAE,QAAQ;AAAA,EAC5D,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,WAAW,UAAQ,aAAa,EAAE,QAAQ,YAAW,CAAC,EAAE,WAAW;AAAA,EACnE,gBAAgB,UAAQ,kBAAkB,EAAE,QAAQ,YAAU,CAAC;AAAA,EAC/D,cAAc,MAAK,cAAc;AAAA,EACjC,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AACpE,CACD;;;AClBA,gBAAS,cAAK,aAAM;AACpB,mBAAS,qBAAQ,mBAAS,mBAAO,sBAAS;AAY1C,IAAM,cAAY;AAClB,IAAM,eAAc;AAEb,IAAM,sBAAsB,UAAQ,wBAAwB;AAAA,EAClE,QAAQ,OAAM,QAAQ,EACpB,MAAmD,EACnD,QAAQ;AAAA,EACV,eAAe,UAAQ,iBAAiB,EAAE,QAAQ,YAAU,CAAC,EAAE,WAAW;AAAA,EAC1E,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,SAAS,SAAQ,SAAS,EAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,EAClD,iBAAiB,UAAQ,mBAAmB;AAAA,IAC3C,QAAQ;AAAA,EACT,CAAC,EAAE,QAAQ;AAAA,EACX,MAAM,UAAQ,QAAQ,EAAE,QAAQ,aAAY,CAAC,EAC3C,MAAyB,EACzB,QAAQ;AAAA,EACV,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AACpE,CAAC;;;ACxBD,eAAS;AACT,mBAAS,qBAAQ,mBAAS,oBAAO,sBAAS;AAa1C,IAAM,cAAY;AAEX,IAAM,0BAA0B,UAAQ,6BAA6B;AAAA,EAC3E,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,YAAY,UAAQ,cAAc,EAAE,QAAQ,YAAU,CAAC,EAAE,WAAW;AACrE,CAAC;AACM,IAAM,0BAA0B,UAAQ,6BAA6B;AAAA,EAC3E,WAAW,UAAQ,aAAa,EAAE,QAAQ,YAAU,CAAC,EAAE,QAAQ;AAAA,EAC/D,kBAAkB,UAAQ,oBAAoB;AAAA,IAC7C,QAAQ;AAAA,EACT,CAAC,EAAE,QAAQ;AAAA,EACX,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,0BAA0B,UAAQ,4BAA4B;AAAA,IAC7D,QAAQ;AAAA,EACT,CAAC,EAAE,WAAW;AAAA,EACd,UAAU,SAAQ,UAAU,EAAE,QAAQ;AAAA,EACtC,SAAS,UAAQ,WAAW,EAAE,QAAQ,YAAU,CAAC,EAAE,QAAQ;AAC5D,CAAC;AACM,IAAM,8BAA8B,UAC1C,iCACA;AAAA,EACC,WAAW,UAAQ,aAAa,EAAE,QAAQ,YAAU,CAAC,EAAE,QAAQ;AAAA,EAC/D,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,0BAA0B,QAAM,0BAA0B,EACxD,MAAkB,EAClB,QAAQ;AAAA,EACV,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,OAAO,UAAQ,SAAS,EAAE,QAAQ,YAAU,CAAC,EAAE,QAAQ;AAAA,EACvD,YAAY,UAAQ,cAAc,EAAE,QAAQ,YAAU,CAAC,EAAE,WAAW;AAAA,EACpE,kBAAkB,QAAM,kBAAkB,EAAE,MAAgB,EAAE,QAAQ;AAAA,EACtE,cAAc,UAAQ,gBAAgB,EAAE,QAAQ,YAAU,CAAC,EAAE,QAAQ;AAAA,EACrE,OAAO,UAAQ,SAAS,EAAE,QAAQ,YAAU,CAAC;AAC9C,CACD;;;ACtDA,gBAAS,YAAK;AACd;AAAA,YACC;AAAA,aACA;AAAA,gBACA;AAAA,UACA;AAAA,aACA;AAAA;AAKD,IAAM,cAAY;AAEX,IAAM,oBAAoB,UAChC,sBACA;AAAA,EACC,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,iBAAiB,MAAK,iBAAiB,EAAE,QAAQ;AAAA,EACjD,MAAM,UAAQ,QAAQ,EAAE,QAAQ,YAAU,CAAC,EAAE,QAAQ;AAAA,EACrD,UAAU,UAAQ,YAAY,EAAE,QAAQ,YAAU,CAAC,EAAE,QAAQ;AAAA,EAC7D,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AACpE,GACA,CAAC,WAAW,EAAE,IAAI,YAAW,EAAE,SAAS,CAAC,MAAM,UAAU,MAAM,IAAI,EAAE,CAAC,EAAE,EACzE;;;ACvBA,eAAS;AACT;AAAA,YACC;AAAA,aACA;AAAA,WACA;AAAA,aACA;AAAA,UACA;AAAA,aACA;AAAA;AAKD,IAAM,cAAY;AAClB,IAAM,qBAAqB;AAEpB,IAAM,2BAA2B,UAAQ,6BAA6B;AAAA,EAC5E,WAAW,SAAQ,WAAW;AAAA,EAC9B,SAAS,SAAO,WAAW,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA,EAClE,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,eAAe,UAAQ,iBAAiB,EAAE,QAAQ,YAAU,CAAC,EAAE,WAAW;AAAA,EAC1E,aAAa,UAAQ,eAAe,EAAE,QAAQ,mBAAmB,CAAC;AAAA,EAClE,iBAAiB,SAAO,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAAA,EAC7D,YAAY,MAAK,YAAY,EAAE,QAAQ;AAAA,EACvC,YAAY,QAAM,YAAY,EAAE,MAAgB;AAAA,EAChD,SAAS,UAAQ,WAAW,EAAE,QAAQ,YAAU,CAAC,EAAE,QAAQ;AAC5D,CAAC;;;ACzBD,iBAAS,aAAM;AACf,mBAAS,mBAAQ,oBAAO,mBAAS,mBAAM;AAQvC,IAAM,cAAY;AAClB,IAAM,cAAa;AAGZ,IAAM,yBAAyB,UAAQ,2BAA2B;AAAA,EACxE,UAAU,SAAO,YAAY,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACzD,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,cAAc,UAAQ,gBAAgB,EAAE,QAAQ,YAAW,CAAC,EAAE,QAAQ;AAAA,EACtE,aAAa,UAAQ,eAAe,EAAE,QAAQ,YAAU,CAAC,EAAE,WAAW;AAAA,EACtE,eAAe,QAAM,eAAe,EAAE,MAAoB,EAAE,QAAQ;AAAA,EACpE,YAAY,OAAK,YAAY;AAAA,EAC7B,aAAa,SAAO,eAAe,EAAE,MAAM,SAAS,CAAC;AACtD,CAAC;;;ACTD;AACA;AAAA;AAAA;AASA,IAAM,cAAc,CAAC,UAAmB;AAAA,EACvC,IAAI,UAAU,QAAQ,OAAO,UAAU;AAAA,IAAU,OAAO,OAAO,KAAK;AAAA,EACpE,MAAM,QAAQ,QAAQ,IAAI,OAAO,OAAO;AAAA,EACxC,IAAI,MAAM,QAAQ,KAAK;AAAA,IAAG,OAAO,MAAM,IAAI,CAAC,SAAS,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE;AAAA,EAE1E,OAAO;AAAA;AAGR,IAAM,oBAAoB,CAAC,UAC1B,MAAM,YAAY,IAAI,WAAW,EAAE,KAAK,EAAE;AAE3C,IAAM,gBAAgB,CAAC,UAAmB;AAAA,EACzC,IAAI,UAAU,QAAQ,UAAU;AAAA,IAAW,OAAO;AAAA,EAClD,IAAI,GAAG,OAAO,GAAG;AAAA,IAAG,OAAO,kBAAkB,KAAK;AAAA,EAClD,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO,IAAI,MAAM,QAAQ,OAAO,IAAI;AAAA,EACnE,IAAI,OAAO,UAAU;AAAA,IAAW,OAAO,QAAQ,SAAS;AAAA,EACxD,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO,OAAO,KAAK;AAAA,EAClD,IAAI,MAAM,QAAQ,KAAK,KAAK,OAAO,UAAU,UAAU;AAAA,IACtD,OAAO,IAAI,KAAK,UAAU,KAAK;AAAA,EAChC;AAAA,EAEA,OAAO,OAAO,KAAK;AAAA;AAGpB,IAAM,YAAY,CAAC,WAAqB;AAAA,EACvC,MAAM,QAAQ,CAAC,IAAI,OAAO,SAAS,OAAO,WAAW,CAAC;AAAA,EACtD,IAAI,OAAO;AAAA,IAAS,MAAM,KAAK,aAAa;AAAA,EAC5C,IAAI,OAAO,WAAW,CAAC,OAAO;AAAA,IAAS,MAAM,KAAK,UAAU;AAAA,EAC5D,IAAI,OAAO,cAAc,OAAO,YAAY,WAAW;AAAA,IACtD,MAAM,KAAK,WAAW,cAAc,OAAO,OAAO,GAAG;AAAA,EACtD;AAAA,EACA,IAAI,OAAO;AAAA,IAAU,MAAM,KAAK,QAAQ;AAAA,EAExC,OAAO,MAAM,KAAK,GAAG;AAAA;AAGtB,IAAM,kBAAkB,CAAC,gBACxB,gBAAgB,YAAY,IAAI,CAAC,WAAW,IAAI,OAAO,OAAO,EAAE,KAAK,IAAI;AAK1E,IAAM,mBAAmB,CAAC,UAAmB;AAAA,EAC5C,MAAM,MAAM,eAAe,KAAK;AAAA,EAChC,MAAM,cAAc,IAAI,QAAQ,IAAI,SAAS;AAAA,EAC7C,MAAM,WAAW,IAAI,QAAQ,KAAK,CAAC,WAAW,OAAO,OAAO;AAAA,EAC5D,MAAM,cAAc,IAAI,YAAY,IAAI,WAAW,CAAC;AAAA,EACpD,MAAM,QACL,aAAa,aAAa,YAAY,SAAS,IAC5C,CAAC,GAAG,aAAa,gBAAgB,WAAW,CAAC,IAC7C;AAAA,EACJ,MAAM,OAAO,MAAM,IAAI,CAAC,SAAS,IAAK,MAAM,EAAE,KAAK;AAAA,CAAK;AAAA,EAExD,OAAO,+BAA+B,IAAI;AAAA,EAAY;AAAA;AAAA;AAMhD,IAAM,kBAAkB,CAAC,WAC/B,OAAO,IAAI,gBAAgB,EAAE,KAAK;AAAA;AAAA,CAAM;;;ACvEzC;AAgBA,IAAM,cAAc;AAAA;AAAA;AAAA;AAOpB,IAAM,eAAe,CAAC,UACrB,OAAO,UAAU,YACjB,UAAU,QACV,OAAO,QAAQ,IAAI,OAAO,IAAI,MAAM;AAErC,IAAM,gBAAgB,MAErB,OAAO,KAAK,eAAe;AAE5B,IAAM,WAAW,OAChB,MACA,IACA,KACA,QACI;AAAA,EACJ,MAAM,KAAK,MAAM,GAAG;AAAA,EACpB,MAAM,KAAK,MACV,yEACA,CAAC,IAAI,KAAK,IAAI,CAAC,CAChB;AAAA,EACA,IAAI,UAAU,IAAI;AAAA;AAGnB,IAAM,SAAS,OACd,MACA,IACA,KACA,SACA,QACA,QACI;AAAA,EACJ,IAAI,QAAQ,IAAI,EAAE,GAAG;AAAA,IACpB,OAAO,QAAQ,KAAK,EAAE;AAAA,IACtB,IAAI,UAAU,IAAI;AAAA,IAElB;AAAA,EACD;AAAA,EACA,MAAM,SAAS,MAAM,IAAI,KAAK,GAAG;AAAA,EACjC,OAAO,QAAQ,KAAK,EAAE;AAAA;AAGhB,IAAM,gBAAgB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA,MAAM,QAAQ;AAAA,MACa;AAAA,EAC3B,MAAM,OAAO,IAAI,KAAK,EAAE,kBAAkB,YAAY,CAAC;AAAA,EACvD,MAAM,SAA6B,EAAE,SAAS,CAAC,GAAG,SAAS,CAAC,EAAE;AAAA,EAE9D,IAAI;AAAA,IACH,MAAM,KAAK,MAAM,WAAW;AAAA,IAC5B,MAAM,UAAU,MAAM,KAAK,MAAM,oCAAoC;AAAA,IACrE,MAAM,UAAU,IAAI,IACnB,QAAQ,KAAK,OAAO,YAAY,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE,CACtD;AAAA,IAEA,MAAM,WAAW,UAAU,cAAc;AAAA,IACzC,MAAM,OAAO,SAAS,QAAQ,CAAC,UAC9B,gBAAgB,OAAO,WAAW,IAAI,CAAC,eAAe;AAAA,MACrD,IAAI,GAAG,SAAS,UAAU;AAAA,MAC1B,KAAK,UAAU;AAAA,IAChB,EAAE,CACH;AAAA,IAEA,MAAM,KAAK,OAAO,OAAO,OAAO,SAAS;AAAA,MACxC,MAAM;AAAA,MAEN,OAAO,OAAO,MAAM,KAAK,IAAI,KAAK,KAAK,SAAS,QAAQ,GAAG;AAAA,OACzD,QAAQ,QAAQ,CAAC;AAAA,YACnB;AAAA,IACD,MAAM,KAAK,IAAI;AAAA;AAAA,EAGhB,OAAO;AAAA;;;ACpBR,IAAM,gBAAgB,CACrB,OACA,YACsB;AAAA,EACtB;AAAA,EACA,YAAY,CAAC,EAAE,IAAI,aAAa,KAAK,gBAAgB,MAAM,EAAE,CAAC;AAC/D;AAEO,IAAM,kBAAsD;AAAA,EAClE,UAAU,cAAc,YAAY,CAAC,mBAAmB,iBAAiB,CAAC;AAAA,EAC1E,SAAS,cAAc,WAAW;AAAA,IACjC;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAC;AAAA,EACD,OAAO,cAAc,SAAS,CAAC,gBAAgB,CAAC;AAAA,EAChD,aAAa,cAAc,eAAe;AAAA,IACzC;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAC;AAAA,EACD,KAAK,cAAc,OAAO,CAAC,aAAa,CAAC;AAAA,EACzC,iBAAiB,cAAc,mBAAmB;AAAA,IACjD;AAAA,IACA;AAAA,EACD,CAAC;AAAA,EACD,SAAS,cAAc,WAAW,CAAC,aAAa,CAAC;AAAA,EACjD,KAAK,cAAc,OAAO,CAAC,mBAAmB,CAAC;AAAA,EAC/C,MAAM,cAAc,QAAQ;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAC;AAAA,EACD,eAAe,cAAc,iBAAiB;AAAA,IAC7C;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAC;AAAA,EACD,cAAc,cAAc,gBAAgB,CAAC,uBAAuB,CAAC;AAAA,EACrE,QAAQ,cAAc,UAAU,CAAC,kBAAkB,CAAC;AAAA,EACpD,OAAO,cAAc,SAAS,CAAC,UAAU,CAAC;AAAA,EAC1C,MAAM,cAAc,QAAQ,CAAC,eAAe,CAAC;AAAA,EAC7C,UAAU,cAAc,YAAY;AAAA,IACnC;AAAA,IACA;AAAA,EACD,CAAC;AAAA,EACD,KAAK,cAAc,OAAO,CAAC,qBAAqB,yBAAyB,CAAC;AAAA,EAC1E,OAAO,cAAc,SAAS,CAAC,iBAAiB,CAAC;AAAA,EACjD,IAAI,cAAc,MAAM;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAC;AAAA,EACD,UAAU,cAAc,YAAY,CAAC,wBAAwB,CAAC;AAAA,EAC9D,UAAU,cAAc,YAAY,CAAC,sBAAsB,CAAC;AAC7D;;;ACtIA,IAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+CAM6B,OAAO,KAAK,SAAS,EAAE,KAAK,EAAE,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAMtF,IAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAQF,OAAO,KAAK,eAAe,EAAE,KAAK,EAAE,KAAK,IAAI;AAAA;AAGjE,IAAM,eAAe;AAAA;AAAA;AAAA;AAAA,sBAIC,OAAO,KAAK,SAAS,EAAE,KAAK,EAAE,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAe7D,IAAM,mBAAmB,CAAC,SAAgC;AAAA,EACzD,MAAM,SAAsB;AAAA,IAC3B,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,MAAM;AAAA,EACP;AAAA,EACA,MAAM,OAAO,CAAC,GAAG,IAAI;AAAA,EACrB,OAAO,KAAK,SAAS,GAAG;AAAA,IACvB,MAAM,OAAO,KAAK,MAAM;AAAA,IACxB,IAAI,SAAS,YAAY,SAAS,MAAM;AAAA,MACvC,OAAO,OAAO;AAAA,IACf,EAAO,SAAI,SAAS,UAAU,SAAS,kBAAkB;AAAA,MACxD,OAAO,cAAc,KAAK,MAAM;AAAA,IACjC,EAAO,SAAI,SAAS,YAAY;AAAA,MAC/B,MAAM,OAAO,KAAK,MAAM,KAAK;AAAA,MAC7B,OAAO,SAAS,KACd,MAAM,GAAG,EACT,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC,EAC3B,OAAO,CAAC,UAAU,MAAM,SAAS,CAAC,EAElC,IAAI,CAAC,UAAU,KAAkB;AAAA,IACpC;AAAA,EACD;AAAA,EAEA,OAAO;AAAA;AAWR,IAAM,kBAAkB,CAAC,SAA+B;AAAA,EACvD,MAAM,SAAqB;AAAA,IAC1B,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EACT;AAAA,EACA,MAAM,OAAO,CAAC,GAAG,IAAI;AAAA,EACrB,MAAM,cAAwB,CAAC;AAAA,EAC/B,OAAO,KAAK,SAAS,GAAG;AAAA,IACvB,MAAM,OAAO,KAAK,MAAM;AAAA,IACxB,IAAI,SAAS;AAAA,MAAW;AAAA,IACxB,IAAI,SAAS,YAAY,SAAS,MAAM;AAAA,MACvC,OAAO,OAAO;AAAA,IACf,EAAO,SAAI,SAAS,UAAU,SAAS,kBAAkB;AAAA,MACxD,OAAO,cAAc,KAAK,MAAM;AAAA,IACjC,EAAO,SAAI,SAAS,YAAY;AAAA,MAC/B,OAAO,SAAS;AAAA,IACjB,EAAO,SAAI,CAAC,KAAK,WAAW,IAAI,GAAG;AAAA,MAClC,YAAY,KAAK,IAAI;AAAA,IACtB;AAAA,EACD;AAAA,EACA,OAAO,SAAS,YAAY;AAAA,EAC5B,OAAO,OAAO,YAAY;AAAA,EAE1B,OAAO;AAAA;AAGR,IAAM,MAAM,CAAC,SAAiB,UAAkB;AAAA,EAC/C,QAAQ,OAAO,MAAM,UAAU;AAAA;AAAA,CAAa;AAAA,EAC5C,QAAQ,OAAO,MAAM,KAAK;AAAA,EAC1B,QAAQ,KAAK,CAAC;AAAA;AAGf,IAAM,aAAa,OAAO,SAAmB;AAAA,EAC5C,QAAQ,QAAQ,aAAa,SAAS,iBAAiB,IAAI;AAAA,EAC3D,IAAI,MAAM;AAAA,IACT,QAAQ,OAAO,MAAM,aAAa;AAAA,IAElC;AAAA,EACD;AAAA,EACA,MAAM,WAAW,eAAe,QAAQ,IAAI;AAAA,EAC5C,IAAI,aAAa,aAAa,SAAS,WAAW,GAAG;AAAA,IACpD,IAAI,qDAAqD,aAAa;AAAA,IAEtE;AAAA,EACD;AAAA,EACA,MAAM,UACL,QAAQ,OAAO,CAAC,UAAU,EAAE,SAAS,gBAAgB,KAAK,CAAC;AAAA,EAC5D,IAAI,QAAQ,SAAS,GAAG;AAAA,IACvB,IAAI,qBAAqB,QAAQ,KAAK,IAAI,KAAK,aAAa;AAAA,IAE5D;AAAA,EACD;AAAA,EACA,MAAM,SAAS,MAAM,cAAc,EAAE,QAAQ,aAAa,SAAS,CAAC;AAAA,EACpE,QAAQ,OAAO,MACd;AAAA,EAAK,OAAO,QAAQ,gCAAgC,OAAO,QAAQ;AAAA,CACpE;AAAA;AAGD,IAAM,mBAAmB,OAAO,SAAmB;AAAA,EAClD,QAAQ,QAAQ,aAAa,MAAM,MAAM,WAAW,gBAAgB,IAAI;AAAA,EACxE,IAAI,MAAM;AAAA,IACT,QAAQ,OAAO,MAAM,YAAY;AAAA,IAEjC;AAAA,EACD;AAAA,EACA,IAAI,WAAW,WAAW;AAAA,IACzB,IAAI,sBAAsB,YAAY;AAAA,IAEtC;AAAA,EACD;AAAA,EACA,MAAM,WAAW,UAAU;AAAA,EAC3B,IAAI,aAAa,WAAW;AAAA,IAC3B,IAAI,mBAAmB,WAAW,YAAY;AAAA,IAE9C;AAAA,EACD;AAAA,EACA,IAAI,SAAS,WAAW;AAAA,IACvB,IAAI,yBAAyB,YAAY;AAAA,IAEzC;AAAA,EACD;AAAA,EACA,MAAM,WAAW,eAAe,QAAQ,IAAI;AAAA,EAC5C,IAAI,aAAa,aAAa,SAAS,WAAW,GAAG;AAAA,IACpD,IAAI,qDAAqD,YAAY;AAAA,IAErE;AAAA,EACD;AAAA,EAEA,QAAQ,OAAO,MAAM,IAAI,mBAAmB;AAAA,CAAQ;AAAA,EACpD,MAAM,SAAS,MAAM,SAAS,MAAM,IAAI;AAAA,EACxC,QAAQ,OAAO,MACd,IAAI,kBAAkB,OAAO,MAAM,mBAAmB,OAAO,WAAW;AAAA,CACzE;AAAA,EACA,MAAM,SAAS,MAAM,UAAU,QAAQ,EAAE,QAAQ,aAAa,SAAS,CAAC;AAAA,EACxE,IAAI,QAAQ;AAAA,IACX,QAAQ,OAAO,MACd,IAAI,oBAAoB,OAAO,sBAAsB,OAAO;AAAA,CAC7D;AAAA,EACD,EAAO;AAAA,IACN,QAAQ,OAAO,MACd,IAAI;AAAA,CACL;AAAA;AAAA;AAIF,IAAM,OAAO,YAAY;AAAA,EACxB,MAAM,OAAO,QAAQ,KAAK,MAAM,CAAC;AAAA,EACjC,MAAM,UAAU,KAAK,MAAM;AAAA,EAC3B,IAAI,YAAY,aAAa,YAAY,UAAU,YAAY,UAAU;AAAA,IACxE,QAAQ,OAAO,MAAM,SAAS;AAAA,IAE9B;AAAA,EACD;AAAA,EACA,IAAI,YAAY,WAAW;AAAA,IAC1B,MAAM,WAAW,IAAI;AAAA,IAErB;AAAA,EACD;AAAA,EACA,IAAI,YAAY,UAAU;AAAA,IACzB,MAAM,iBAAiB,IAAI;AAAA,IAE3B;AAAA,EACD;AAAA,EACA,IAAI,oBAAoB,YAAY,SAAS;AAAA;AAG9C,MAAM,KAAK;",
40
40
  "debugId": "A939370FFB3E484364756E2164756E21",
41
41
  "names": []
42
42
  }