@wordrhyme/db 0.1.0-alpha.14

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.
Files changed (98) hide show
  1. package/README.md +66 -0
  2. package/dist/acl-policy.d.ts +86 -0
  3. package/dist/acl-policy.d.ts.map +1 -0
  4. package/dist/chunk-3TTVLSF5.js +3390 -0
  5. package/dist/chunk-3TTVLSF5.js.map +1 -0
  6. package/dist/chunk-DCJM6GN5.js +264 -0
  7. package/dist/chunk-DCJM6GN5.js.map +1 -0
  8. package/dist/chunk-KWWJRUIK.js +54 -0
  9. package/dist/chunk-KWWJRUIK.js.map +1 -0
  10. package/dist/chunk-XAIEVBMU.js +212 -0
  11. package/dist/chunk-XAIEVBMU.js.map +1 -0
  12. package/dist/delete-policy.d.ts +11 -0
  13. package/dist/delete-policy.d.ts.map +1 -0
  14. package/dist/index.d.ts +31 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +545 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/plugin.d.ts +110 -0
  19. package/dist/plugin.d.ts.map +1 -0
  20. package/dist/plugin.js +21 -0
  21. package/dist/plugin.js.map +1 -0
  22. package/dist/relations/index.d.ts +105 -0
  23. package/dist/relations/index.d.ts.map +1 -0
  24. package/dist/relations/index.js +9 -0
  25. package/dist/relations/index.js.map +1 -0
  26. package/dist/schema/action-journal.d.ts +386 -0
  27. package/dist/schema/action-journal.d.ts.map +1 -0
  28. package/dist/schema/audit-archive.d.ts +934 -0
  29. package/dist/schema/audit-archive.d.ts.map +1 -0
  30. package/dist/schema/audit-events.d.ts +502 -0
  31. package/dist/schema/audit-events.d.ts.map +1 -0
  32. package/dist/schema/audit-logs.d.ts +418 -0
  33. package/dist/schema/audit-logs.d.ts.map +1 -0
  34. package/dist/schema/auth.d.ts +2727 -0
  35. package/dist/schema/auth.d.ts.map +1 -0
  36. package/dist/schema/billing.d.ts +3969 -0
  37. package/dist/schema/billing.d.ts.map +1 -0
  38. package/dist/schema/common.d.ts +87 -0
  39. package/dist/schema/common.d.ts.map +1 -0
  40. package/dist/schema/currency.d.ts +791 -0
  41. package/dist/schema/currency.d.ts.map +1 -0
  42. package/dist/schema/entity-extensions.d.ts +314 -0
  43. package/dist/schema/entity-extensions.d.ts.map +1 -0
  44. package/dist/schema/entity-ownerships.d.ts +862 -0
  45. package/dist/schema/entity-ownerships.d.ts.map +1 -0
  46. package/dist/schema/feature-flags.d.ts +770 -0
  47. package/dist/schema/feature-flags.d.ts.map +1 -0
  48. package/dist/schema/geo.d.ts +824 -0
  49. package/dist/schema/geo.d.ts.map +1 -0
  50. package/dist/schema/i18n.d.ts +1109 -0
  51. package/dist/schema/i18n.d.ts.map +1 -0
  52. package/dist/schema/index.d.ts +43 -0
  53. package/dist/schema/index.d.ts.map +1 -0
  54. package/dist/schema/index.js +507 -0
  55. package/dist/schema/index.js.map +1 -0
  56. package/dist/schema/media.d.ts +1147 -0
  57. package/dist/schema/media.d.ts.map +1 -0
  58. package/dist/schema/menus.d.ts +636 -0
  59. package/dist/schema/menus.d.ts.map +1 -0
  60. package/dist/schema/notification-channels.d.ts +288 -0
  61. package/dist/schema/notification-channels.d.ts.map +1 -0
  62. package/dist/schema/notification-preferences.d.ts +300 -0
  63. package/dist/schema/notification-preferences.d.ts.map +1 -0
  64. package/dist/schema/notification-templates.d.ts +476 -0
  65. package/dist/schema/notification-templates.d.ts.map +1 -0
  66. package/dist/schema/notifications.d.ts +1139 -0
  67. package/dist/schema/notifications.d.ts.map +1 -0
  68. package/dist/schema/permission-fields.d.ts +96 -0
  69. package/dist/schema/permission-fields.d.ts.map +1 -0
  70. package/dist/schema/permissions.d.ts +173 -0
  71. package/dist/schema/permissions.d.ts.map +1 -0
  72. package/dist/schema/plugin-migrations.d.ts +204 -0
  73. package/dist/schema/plugin-migrations.d.ts.map +1 -0
  74. package/dist/schema/plugins.d.ts +1977 -0
  75. package/dist/schema/plugins.d.ts.map +1 -0
  76. package/dist/schema/relationships.d.ts +221 -0
  77. package/dist/schema/relationships.d.ts.map +1 -0
  78. package/dist/schema/role-permissions.d.ts +305 -0
  79. package/dist/schema/role-permissions.d.ts.map +1 -0
  80. package/dist/schema/roles.d.ts +260 -0
  81. package/dist/schema/roles.d.ts.map +1 -0
  82. package/dist/schema/scheduled-tasks.d.ts +1334 -0
  83. package/dist/schema/scheduled-tasks.d.ts.map +1 -0
  84. package/dist/schema/settings.d.ts +819 -0
  85. package/dist/schema/settings.d.ts.map +1 -0
  86. package/dist/schema/site-presentation.d.ts +1587 -0
  87. package/dist/schema/site-presentation.d.ts.map +1 -0
  88. package/dist/schema/teams.d.ts +381 -0
  89. package/dist/schema/teams.d.ts.map +1 -0
  90. package/dist/schema/web-design.d.ts +1542 -0
  91. package/dist/schema/web-design.d.ts.map +1 -0
  92. package/dist/schema/webhooks.d.ts +1016 -0
  93. package/dist/schema/webhooks.d.ts.map +1 -0
  94. package/dist/zod/index.d.ts +2 -0
  95. package/dist/zod/index.d.ts.map +1 -0
  96. package/dist/zod/index.js +6 -0
  97. package/dist/zod/index.js.map +1 -0
  98. package/package.json +63 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/schema/index.ts","../src/schema/auth.ts","../src/schema/teams.ts","../src/schema/relationships.ts","../src/schema/i18n.ts","../src/schema/common.ts","../src/schema/roles.ts","../src/schema/role-permissions.ts","../src/schema/permissions.ts","../src/schema/menus.ts","../src/schema/plugins.ts","../src/schema/plugin-migrations.ts","../src/schema/entity-extensions.ts","../src/schema/action-journal.ts","../src/schema/settings.ts","../src/schema/feature-flags.ts","../src/schema/media.ts","../src/schema/web-design.ts","../src/schema/site-presentation.ts","../src/schema/notifications.ts","../src/schema/notification-templates.ts","../src/schema/notification-channels.ts","../src/schema/notification-preferences.ts","../src/schema/audit-logs.ts","../src/schema/audit-events.ts","../src/schema/audit-archive.ts","../src/schema/entity-ownerships.ts","../src/schema/billing.ts","../src/schema/currency.ts","../src/schema/geo.ts","../src/schema/webhooks.ts","../src/schema/scheduled-tasks.ts"],"sourcesContent":["/**\n * Drizzle Schema Definitions\n *\n * Single source of truth for all database tables.\n * These schemas include FK constraints and are used by:\n * - drizzle-kit for migrations\n * - Server runtime for database operations\n * - Frontend for type inference (via @wordrhyme/db)\n *\n * Zod schemas in ./zod are generated from these.\n */\n\n// Core auth tables\nexport * from './auth';\n\n// Team tables\nexport * from './teams';\n\n// Relationship tables\nexport * from './relationships';\n\n// i18n tables\nexport * from './i18n';\n\n// RBAC tables\nexport * from './roles';\nexport * from './role-permissions';\nexport * from './permissions';\nexport * from './menus';\n// Permission field utilities\nexport * from './permission-fields';\n\n// Plugin system tables\nexport * from './plugins';\nexport * from './plugin-migrations';\nexport * from './entity-extensions';\n\n// AI Action Gateway\nexport * from './action-journal';\n\n// Configuration tables\nexport * from './settings';\nexport * from './feature-flags';\n\n// Media table (unified files + assets)\nexport * from './media';\n\n// Web design/page builder tables\nexport * from './web-design';\nexport * from './site-presentation';\n\n// Notification tables\nexport * from './notifications';\nexport * from './notification-templates';\nexport * from './notification-channels';\nexport * from './notification-preferences';\n\n// Audit tables\nexport * from './audit-logs';\nexport * from './audit-events';\nexport * from './audit-archive';\n\n// LBAC tables\nexport * from './entity-ownerships';\n\n// Billing tables\nexport * from './billing';\nexport * from './currency';\nexport * from './geo';\n\n// Webhook tables\nexport * from './webhooks';\n\n// Scheduled tasks tables\nexport * from './scheduled-tasks';\n","/**\n * Auth Database Schema\n *\n * Drizzle ORM table definitions for authentication (Better Auth compatible).\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport {\n pgTable,\n text,\n integer,\n timestamp,\n boolean,\n index,\n uniqueIndex,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { z } from 'zod';\n\n// ============================================================\n// User Table\n// ============================================================\n\nexport const user = pgTable('user', {\n id: text('id').primaryKey(),\n name: text('name').notNull(),\n email: text('email').notNull().unique(),\n emailVerified: boolean('email_verified').default(false).notNull(),\n image: text('image'),\n phoneNumber: text('phone_number').unique(),\n phoneNumberVerified: boolean('phone_number_verified').default(false).notNull(),\n whatsappAccount: text('whatsapp_account'),\n createdAt: timestamp('created_at').defaultNow().notNull(),\n updatedAt: timestamp('updated_at')\n .defaultNow()\n .$onUpdate(() => new Date())\n .notNull(),\n // Admin plugin fields\n role: text('role').default('user'),\n banned: boolean('banned').default(false),\n banReason: text('ban_reason'),\n banExpires: timestamp('ban_expires'),\n});\n\n// ============================================================\n// Session Table\n// ============================================================\n\nexport const session = pgTable(\n 'session',\n {\n id: text('id').primaryKey(),\n expiresAt: timestamp('expires_at').notNull(),\n token: text('token').notNull().unique(),\n createdAt: timestamp('created_at').defaultNow().notNull(),\n updatedAt: timestamp('updated_at')\n .defaultNow()\n .$onUpdate(() => new Date())\n .notNull(),\n ipAddress: text('ip_address'),\n userAgent: text('user_agent'),\n // FK to user table\n userId: text('user_id')\n .notNull()\n .references(() => user.id, { onDelete: 'cascade' }),\n activeOrganizationId: text('active_organization_id'),\n // Admin plugin field for impersonation\n impersonatedBy: text('impersonated_by'),\n },\n (table) => [index('session_userId_idx').on(table.userId)],\n);\n\n// ============================================================\n// Account Table (OAuth providers)\n// ============================================================\n\nexport const CREDENTIAL_ACCOUNT_ISSUER = 'local:credential';\n\nexport const account = pgTable(\n 'account',\n {\n id: text('id').primaryKey(),\n accountId: text('account_id').notNull(),\n providerId: text('provider_id').notNull(),\n issuer: text('issuer').notNull(),\n // FK to user table\n userId: text('user_id')\n .notNull()\n .references(() => user.id, { onDelete: 'cascade' }),\n accessToken: text('access_token'),\n refreshToken: text('refresh_token'),\n idToken: text('id_token'),\n accessTokenExpiresAt: timestamp('access_token_expires_at'),\n refreshTokenExpiresAt: timestamp('refresh_token_expires_at'),\n scope: text('scope'),\n password: text('password'),\n createdAt: timestamp('created_at').defaultNow().notNull(),\n updatedAt: timestamp('updated_at')\n .defaultNow()\n .$onUpdate(() => new Date())\n .notNull(),\n },\n (table) => [\n index('account_userId_idx').on(table.userId),\n uniqueIndex('account_issuer_accountId_uidx').on(table.issuer, table.accountId),\n ],\n);\n\n// ============================================================\n// Verification Table (Email verification, password reset)\n// ============================================================\n\nexport const verification = pgTable(\n 'verification',\n {\n id: text('id').primaryKey(),\n identifier: text('identifier').notNull(),\n value: text('value').notNull(),\n expiresAt: timestamp('expires_at').notNull(),\n createdAt: timestamp('created_at').defaultNow().notNull(),\n updatedAt: timestamp('updated_at')\n .defaultNow()\n .$onUpdate(() => new Date())\n .notNull(),\n },\n (table) => [index('verification_identifier_idx').on(table.identifier)],\n);\n\n// ============================================================\n// Organization Table (Multi-tenancy)\n// ============================================================\n\nexport const organization = pgTable(\n 'organization',\n {\n id: text('id').primaryKey(),\n name: text('name').notNull(),\n slug: text('slug').notNull().unique(),\n logo: text('logo'),\n createdAt: timestamp('created_at').defaultNow().notNull(),\n metadata: text('metadata'),\n },\n (table) => [uniqueIndex('organization_slug_uidx').on(table.slug)],\n);\n\n// ============================================================\n// Member Table (Organization membership)\n// ============================================================\n\nexport const member = pgTable(\n 'member',\n {\n id: text('id').primaryKey(),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n // FK to user table\n userId: text('user_id')\n .notNull()\n .references(() => user.id, { onDelete: 'cascade' }),\n role: text('role').default('member').notNull(),\n createdAt: timestamp('created_at').defaultNow().notNull(),\n // Tenant-level ban fields\n status: text('status').default('active').notNull(),\n banReason: text('ban_reason'),\n banExpires: timestamp('ban_expires'),\n },\n (table) => [\n index('member_organizationId_idx').on(table.organizationId),\n index('member_userId_idx').on(table.userId),\n ],\n);\n\n// ============================================================\n// Invitation Table\n// ============================================================\n\nexport const invitation = pgTable(\n 'invitation',\n {\n id: text('id').primaryKey(),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n email: text('email').notNull(),\n role: text('role'),\n status: text('status').default('pending').notNull(),\n expiresAt: timestamp('expires_at').notNull(),\n createdAt: timestamp('created_at').defaultNow().notNull(),\n // FK to user table\n inviterId: text('inviter_id')\n .notNull()\n .references(() => user.id, { onDelete: 'cascade' }),\n },\n (table) => [\n index('invitation_organizationId_idx').on(table.organizationId),\n index('invitation_email_idx').on(table.email),\n ],\n);\n\n// ============================================================\n// API Key Table (Better Auth API Key plugin)\n// ============================================================\n\nexport const apikey = pgTable(\n 'apikey',\n {\n id: text('id').primaryKey(),\n configId: text('config_id').default('default').notNull(),\n name: text('name'),\n start: text('start'),\n prefix: text('prefix'),\n key: text('key').notNull(),\n // FK to user table\n referenceId: text('user_id')\n .notNull()\n .references(() => user.id, { onDelete: 'cascade' }),\n refillInterval: integer('refill_interval'),\n refillAmount: integer('refill_amount'),\n lastRefillAt: timestamp('last_refill_at'),\n enabled: boolean('enabled').default(true),\n rateLimitEnabled: boolean('rate_limit_enabled').default(true),\n rateLimitTimeWindow: integer('rate_limit_time_window'),\n rateLimitMax: integer('rate_limit_max'),\n requestCount: integer('request_count').default(0),\n remaining: integer('remaining'),\n lastRequest: timestamp('last_request'),\n expiresAt: timestamp('expires_at'),\n createdAt: timestamp('created_at').defaultNow().notNull(),\n updatedAt: timestamp('updated_at')\n .defaultNow()\n .$onUpdate(() => new Date())\n .notNull(),\n permissions: text('permissions'),\n metadata: text('metadata'),\n },\n (table) => [\n index('apikey_configId_idx').on(table.configId),\n index('apikey_userId_idx').on(table.referenceId),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const userSchema = createInsertSchema(user);\nexport const sessionSchema = createInsertSchema(session);\nexport const accountSchema = createInsertSchema(account);\nexport const verificationSchema = createInsertSchema(verification);\nexport const organizationSchema = createInsertSchema(organization);\nexport const memberSchema = createInsertSchema(member);\nexport const invitationSchema = createInsertSchema(invitation);\nexport const apikeySchema = createInsertSchema(apikey);\n\nexport const updateProfileMutation = z.object({\n name: z\n .preprocess(\n (value) => (typeof value === 'string' ? value.trim() : value),\n z.string().min(1, '姓名不能为空').max(80, '姓名不能超过 80 个字符').optional(),\n ),\n whatsappAccount: z\n .preprocess(\n (value) => (typeof value === 'string' ? value.trim() : value),\n z.string().max(64).nullable().optional(),\n )\n .transform((value) => (value === '' ? null : value)),\n});\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type User = typeof user.$inferSelect;\nexport type Session = typeof session.$inferSelect;\nexport type Account = typeof account.$inferSelect;\nexport type Verification = typeof verification.$inferSelect;\nexport type Organization = typeof organization.$inferSelect;\nexport type Member = typeof member.$inferSelect;\nexport type Invitation = typeof invitation.$inferSelect;\nexport type Apikey = typeof apikey.$inferSelect;\n","/**\n * Team Database Schema\n *\n * Drizzle ORM table definitions for teams and team membership.\n * Supports hierarchical team structures with parent-child relationships.\n */\nimport {\n pgTable,\n text,\n timestamp,\n integer,\n index,\n uniqueIndex,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { organization } from './auth';\nimport { user } from './auth';\n\n// ============================================================\n// Team Table (Hierarchical Teams)\n// ============================================================\n\nexport const team = pgTable(\n 'team',\n {\n id: text('id').primaryKey(),\n name: text('name').notNull(),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n createdAt: timestamp('created_at').defaultNow().notNull(),\n updatedAt: timestamp('updated_at')\n .defaultNow()\n .$onUpdate(() => new Date())\n .notNull(),\n // Hierarchical structure\n parentId: text('parent_id'),\n path: text('path'), // Materialized path for efficient tree queries\n level: integer('level').default(0).notNull(),\n },\n (table) => [\n index('team_organizationId_idx').on(table.organizationId),\n index('team_parent_idx').on(table.parentId),\n index('team_org_path_idx').on(table.organizationId, table.path),\n ],\n);\n\n// ============================================================\n// Team Member Table (Many-to-Many: Team <-> User)\n// ============================================================\n\nexport const teamMember = pgTable(\n 'team_member',\n {\n id: text('id').primaryKey(),\n // FK to team table\n teamId: text('team_id')\n .notNull()\n .references(() => team.id, { onDelete: 'cascade' }),\n // FK to user table\n userId: text('user_id')\n .notNull()\n .references(() => user.id, { onDelete: 'cascade' }),\n createdAt: timestamp('created_at').defaultNow().notNull(),\n },\n (table) => [\n uniqueIndex('teamMember_team_user_uidx').on(table.teamId, table.userId),\n index('teamMember_teamId_idx').on(table.teamId),\n index('teamMember_userId_idx').on(table.userId),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const teamSchema = createInsertSchema(team);\nexport const teamMemberSchema = createInsertSchema(teamMember);\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type Team = typeof team.$inferSelect;\nexport type TeamMember = typeof teamMember.$inferSelect;\n","/**\n * Relationship Database Schema\n *\n * Drizzle ORM table definitions for entity relationships.\n * Generic relationship table for linking entities (e.g., user follows user, team contains team).\n */\nimport {\n pgTable,\n text,\n timestamp,\n jsonb,\n index,\n uniqueIndex,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { organization } from './auth';\n\n// ============================================================\n// Relationship Table (Generic Entity Relationships)\n// ============================================================\n\nexport const relationship = pgTable(\n 'relationship',\n {\n id: text('id').primaryKey(),\n // Relationship type (e.g., 'follows', 'contains', 'manages')\n type: text('type').notNull(),\n // Source entity ID\n sourceId: text('source_id').notNull(),\n // Target entity ID\n targetId: text('target_id').notNull(),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n // Additional metadata for the relationship\n metadata: jsonb('metadata'),\n createdAt: timestamp('created_at').defaultNow().notNull(),\n },\n (table) => [\n index('relationship_org_idx').on(table.organizationId),\n index('relationship_source_idx').on(table.type, table.sourceId),\n index('relationship_target_idx').on(table.type, table.targetId),\n uniqueIndex('relationship_unique_idx').on(\n table.type,\n table.sourceId,\n table.targetId,\n ),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const relationshipSchema = createInsertSchema(relationship);\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type Relationship = typeof relationship.$inferSelect;\n","/**\n * i18n Database Schema\n *\n * Drizzle ORM table definitions for internationalization.\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport {\n pgTable,\n text,\n timestamp,\n boolean,\n integer,\n jsonb,\n varchar,\n index,\n uniqueIndex,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { z } from 'zod/v4';\nimport { organization } from './auth';\nimport { paginationSchema } from './common';\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * i18n Message Type\n * - page: Frontend UI text (buttons, labels, messages)\n * - api: Backend API text (error messages, notifications)\n */\nexport type I18nMessageType = 'page' | 'api';\n\n/**\n * i18n Message Source\n * - core: System built-in translations\n * - plugin: Plugin-provided translations\n * - user: User-created translations\n */\nexport type I18nMessageSource = 'core' | 'plugin' | 'user';\n\nexport const I18N_MESSAGE_FORMATS = [\n 'legacy-mixed',\n 'i18next-v4',\n 'legacy-projection',\n] as const;\n\nexport type I18nMessageFormat = (typeof I18N_MESSAGE_FORMATS)[number];\n\n/**\n * Text Direction\n */\nexport type I18nDirection = 'ltr' | 'rtl';\n\n/**\n * Translations JSONB structure\n * Key: BCP 47 locale code (e.g., \"en-US\", \"zh-CN\")\n * Value: Translated text\n */\nexport type TranslationsObject = Record<string, string>;\n\n// ============================================================\n// Tables\n// ============================================================\n\n/**\n * i18n Languages Table\n *\n * Stores available languages for each organization.\n * Each organization has exactly one default language.\n *\n * @example\n * { locale: 'zh-CN', name: '简体中文', isDefault: true }\n * { locale: 'en-US', name: 'English', isDefault: false }\n */\nexport const i18nLanguages = pgTable(\n 'i18n_languages',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n\n // Language identification (BCP 47)\n locale: text('locale').notNull(), // e.g., 'en-US', 'zh-CN', 'ar-SA'\n name: text('name').notNull(), // e.g., 'English', '简体中文', 'العربية'\n nativeName: text('native_name'), // e.g., 'English', '中文', 'العربية'\n\n // Status\n isDefault: boolean('is_default').notNull().default(false),\n isEnabled: boolean('is_enabled').notNull().default(true),\n\n // Display order\n sortOrder: integer('sort_order').notNull().default(0),\n\n // RTL support\n direction: text('direction').notNull().default('ltr').$type<I18nDirection>(),\n\n // Audit fields\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at')\n .notNull()\n .defaultNow()\n .$onUpdate(() => new Date()),\n },\n (table) => [\n // Each locale is unique per organization\n uniqueIndex('i18n_languages_org_locale_uidx').on(\n table.organizationId,\n table.locale\n ),\n // Fast lookup by organization\n index('i18n_languages_org_idx').on(table.organizationId),\n // Fast lookup for enabled languages\n index('i18n_languages_enabled_idx').on(table.organizationId, table.isEnabled),\n ]\n);\n\n/**\n * i18n Messages Table\n *\n * Stores UI translation entries with JSONB for multi-language values.\n * This is for UI text (buttons, labels, messages), NOT content data.\n *\n * @example\n * {\n * key: 'order.submit',\n * namespace: 'commerce',\n * type: 'page',\n * translations: { 'zh-CN': '提交订单', 'en-US': 'Submit Order' }\n * }\n */\nexport const i18nMessages = pgTable(\n 'i18n_messages',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n\n // Message identification\n key: text('key').notNull(), // e.g., 'order.submit', 'common.save'\n namespace: text('namespace').notNull(), // e.g., 'core', 'admin', 'plugin:dsneo.orders'\n\n // Message type\n type: text('type').notNull().default('page').$type<I18nMessageType>(),\n\n // Translations (JSONB)\n translations: jsonb('translations')\n .notNull()\n .default({})\n .$type<TranslationsObject>(),\n\n // Description for translators\n description: text('description'),\n\n // Source tracking\n source: text('source').notNull().default('user').$type<I18nMessageSource>(),\n sourceId: text('source_id'), // Plugin ID if source is 'plugin'\n\n // User modification tracking (for plugin upgrade protection)\n // Deprecated rollback-only mirror. New runtime code must not read or write it.\n userModified: boolean('user_modified').notNull().default(false),\n modifiedLocales: jsonb('modified_locales')\n .notNull()\n .default([])\n .$type<string[]>(),\n archivedLocales: jsonb('archived_locales')\n .notNull()\n .default([])\n .$type<string[]>(),\n messageFormat: varchar('message_format', {\n length: 32,\n enum: I18N_MESSAGE_FORMATS,\n })\n .notNull()\n .default('i18next-v4')\n .$type<I18nMessageFormat>(),\n\n // Status\n isEnabled: boolean('is_enabled').notNull().default(true),\n\n // Version for optimistic locking\n version: integer('version').notNull().default(1),\n\n // Audit fields\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at')\n .notNull()\n .defaultNow()\n .$onUpdate(() => new Date()),\n },\n (table) => [\n // Each key is unique per organization + namespace\n uniqueIndex('i18n_messages_org_ns_key_uidx').on(\n table.organizationId,\n table.namespace,\n table.key\n ),\n // Fast lookup by organization\n index('i18n_messages_org_idx').on(table.organizationId),\n // Fast lookup by namespace (for loading translations)\n index('i18n_messages_org_ns_idx').on(table.organizationId, table.namespace),\n // Fast lookup by source (for plugin lifecycle)\n index('i18n_messages_source_idx').on(table.source, table.sourceId),\n ]\n);\n\n/**\n * Authoritative namespace generation used by every i18n cache layer.\n *\n * A message write and its generation increment must commit in the same\n * transaction. cacheDirty remains true until strict Redis/L1 cleanup succeeds.\n */\nexport const i18nBundleVersions = pgTable(\n 'i18n_bundle_versions',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n namespace: text('namespace').notNull(),\n generation: integer('generation').notNull().default(1),\n cacheDirty: boolean('cache_dirty').notNull().default(false),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at')\n .notNull()\n .defaultNow()\n .$onUpdate(() => new Date()),\n },\n (table) => [\n uniqueIndex('i18n_bundle_versions_org_ns_uidx').on(\n table.organizationId,\n table.namespace,\n ),\n index('i18n_bundle_versions_dirty_idx').on(\n table.cacheDirty,\n table.organizationId,\n ),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\n/**\n * Canonical BCP 47 locale input.\n *\n * Intl is the source of truth here: it accepts complete BCP 47 tags,\n * including scripts, variants, and Unicode extensions, and returns the\n * canonical casing used by every runtime surface.\n */\nfunction canonicalizeLocale(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined;\n const locale = value.trim();\n if (!locale || locale === '*') return undefined;\n\n try {\n return Intl.getCanonicalLocales(locale)[0];\n } catch {\n return undefined;\n }\n}\n\nexport const localeSchema = z\n .string()\n .min(1)\n .refine((value) => canonicalizeLocale(value) !== undefined, 'Invalid BCP 47 locale')\n .transform((value) => canonicalizeLocale(value)!);\n\nexport const translationsObjectSchema = z.record(z.string(), z.string());\n\nexport const i18nDirectionSchema = z.enum(['ltr', 'rtl']);\nexport const i18nMessageTypeSchema = z.enum(['page', 'api']);\nexport const i18nMessageSourceSchema = z.enum(['core', 'plugin', 'user']);\nexport const i18nMessageFormatSchema = z.enum(I18N_MESSAGE_FORMATS);\n\n/** Base Schema - 直接用于 Create/Update */\nexport const i18nLanguageSchema = createInsertSchema(i18nLanguages, {\n locale: () => localeSchema,\n name: (schema) => schema.min(1).max(50),\n nativeName: (schema) => schema.max(50),\n});\n\n/** Base Schema - 直接用于 Create/Update */\nexport const i18nMessageSchema = createInsertSchema(i18nMessages, {\n key: (schema) => schema.min(1).max(200),\n namespace: (schema) => schema.min(1).max(100),\n});\n\n// ============================================================\n// Query Schemas\n// ============================================================\n\n/** Get translations for client (public API) */\nexport const getI18nMessagesQuery = z.object({\n locale: localeSchema,\n namespaces: z.array(z.string()).optional(),\n version: z.string().optional(),\n});\n\n/** Namespace-local i18next JSON v4 bundles with independent versions. */\nexport const getI18nBundlesQuery = z.object({\n locale: localeSchema,\n namespaces: z.array(z.string().min(1).max(160)).min(1).max(32),\n versions: z.record(z.string(), z.string()).optional(),\n});\n\nexport const i18nBundleSchema = z.object({\n version: z.string(),\n notModified: z.boolean(),\n messages: translationsObjectSchema.optional(),\n});\n\nexport const getI18nBundlesResultSchema = z.object({\n bundles: z.record(z.string(), i18nBundleSchema),\n});\n\n/** List languages */\nexport const listI18nLanguagesQuery = paginationSchema.partial();\n\n/** List messages */\nexport const listI18nMessagesQuery = z.object({\n namespace: z.string().optional(),\n key: z.string().optional(),\n}).merge(paginationSchema.partial());\n\n// ============================================================\n// Mutation Schemas\n// ============================================================\n\n/** Set default language mutation */\nexport const setDefaultLanguageMutation = z.object({\n locale: localeSchema,\n});\n\n/** Batch update messages mutation */\nexport const batchUpdateMessagesMutation = z.object({\n messages: z.array(z.object({\n key: z.string(),\n namespace: z.string(),\n translations: translationsObjectSchema,\n })),\n});\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type I18nLanguage = typeof i18nLanguages.$inferSelect;\nexport type I18nMessage = typeof i18nMessages.$inferSelect;\nexport type I18nBundleVersion = typeof i18nBundleVersions.$inferSelect;\nexport type GetI18nBundlesInput = z.infer<typeof getI18nBundlesQuery>;\nexport type GetI18nBundlesResult = z.infer<typeof getI18nBundlesResultSchema>;\n","/**\n * Common Zod Schemas\n *\n * Reusable validation schemas for common patterns like pagination, sorting, etc.\n */\n\nimport { z } from 'zod/v4';\n\n// ============================================================\n// Pagination\n// ============================================================\n\n/**\n * 分页参数\n */\nexport const paginationSchema = z.object({\n limit: z.number().int().min(1).max(100).default(20),\n offset: z.number().int().min(0).default(0),\n});\n\n/**\n * Cursor 分页(可选,用于大数据集)\n */\nexport const cursorPaginationSchema = z.object({\n cursor: z.string().optional(),\n limit: z.number().int().min(1).max(100).default(20),\n});\n\n// ============================================================\n// Sorting\n// ============================================================\n\n/**\n * 排序参数\n */\nexport const sortSchema = z.object({\n sortBy: z.string().optional(),\n sortOrder: z.enum(['asc', 'desc']).default('asc'),\n});\n\n// ============================================================\n// Search\n// ============================================================\n\n/**\n * 搜索参数\n */\nexport const searchSchema = z.object({\n q: z.string().min(1).optional(),\n});\n\n// ============================================================\n// Common Combinations\n// ============================================================\n\n/**\n * 列表查询基础(分页 + 排序)\n */\nexport const listQueryBase = paginationSchema.merge(sortSchema);\n\n/**\n * 搜索列表查询(分页 + 排序 + 搜索)\n */\nexport const searchListQueryBase = listQueryBase.merge(searchSchema);\n\n// ============================================================\n// ID Schemas\n// ============================================================\n\n/**\n * 通用 ID 参数\n */\nexport const idSchema = z.object({\n id: z.string(),\n});\n\n/**\n * UUID 参数(严格验证)\n */\nexport const uuidSchema = z.object({\n id: z.string().uuid(),\n});\n\n/**\n * 批量 ID 操作\n */\nexport const batchIdsSchema = z.object({\n ids: z.array(z.string()).min(1),\n});\n\n// ============================================================\n// Date Range\n// ============================================================\n\n/**\n * 日期范围查询\n */\nexport const dateRangeSchema = z.object({\n startDate: z.string().datetime().optional(),\n endDate: z.string().datetime().optional(),\n});\n","/**\n * Roles Database Schema\n *\n * Drizzle ORM table definitions for role-based access control.\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport {\n pgTable,\n text,\n timestamp,\n boolean,\n uniqueIndex,\n index,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { organization } from './auth';\n\n// ============================================================\n// Roles Table\n// ============================================================\n\n/**\n * Roles Table\n *\n * Stores role definitions.\n * - organizationId = 'platform': Platform organization roles (admin, owner, etc.)\n * - organizationId = 'xxx': Tenant-scoped roles (owner, admin, member, viewer)\n * System roles are protected from deletion.\n */\nexport const roles = pgTable(\n 'roles',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n name: text('name').notNull(),\n slug: text('slug').notNull(),\n description: text('description'),\n isSystem: boolean('is_system').notNull().default(false),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at')\n .notNull()\n .defaultNow()\n .$onUpdate(() => new Date()),\n },\n (table) => [\n uniqueIndex('roles_org_slug_uidx').on(table.organizationId, table.slug),\n index('roles_organization_id_idx').on(table.organizationId),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const roleSchema = createInsertSchema(roles);\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type Role = typeof roles.$inferSelect;\nexport type InsertRole = typeof roles.$inferInsert;\n","/**\n * Role Permissions Database Schema\n *\n * Drizzle ORM table definitions for CASL-compatible permission rules.\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport {\n pgTable,\n text,\n timestamp,\n boolean,\n jsonb,\n uniqueIndex,\n index,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { roles } from './roles';\n\n// ============================================================\n// Role Permissions Table\n// ============================================================\n\n/**\n * Role Permissions Table (CASL Format)\n *\n * Maps roles to CASL-compatible permission rules.\n *\n * CASL Rule Format:\n * - action: The action being permitted (e.g., 'read', 'update', 'manage')\n * - subject: The resource being protected (e.g., 'User', 'Order', 'all')\n * - fields: Optional array of allowed fields for field-level security\n * - conditions: Optional JSON object for ABAC conditions (e.g., { \"ownerId\": \"${user.id}\" })\n * - inverted: If true, this is a \"cannot\" rule (deny instead of allow)\n * - source: Plugin ID if this permission was registered by a plugin\n */\nexport const rolePermissions = pgTable(\n 'role_permissions',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n // FK to roles table\n roleId: text('role_id')\n .notNull()\n .references(() => roles.id, { onDelete: 'cascade' }),\n // CASL rule fields\n action: text('action').notNull(),\n subject: text('subject').notNull(),\n fields: jsonb('fields').$type<string[] | null>(),\n conditions: jsonb('conditions').$type<Record<string, unknown> | null>(),\n inverted: boolean('inverted').notNull().default(false),\n // Plugin tracking\n source: text('source'), // Plugin ID if from a plugin, null for core permissions\n createdAt: timestamp('created_at').notNull().defaultNow(),\n },\n (table) => [\n // Unique constraint on role + action + subject combination\n uniqueIndex('role_permissions_role_action_subject_uidx').on(\n table.roleId,\n table.action,\n table.subject,\n ),\n index('role_permissions_role_id_idx').on(table.roleId),\n index('role_permissions_source_idx').on(table.source),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const rolePermissionSchema = createInsertSchema(rolePermissions);\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type RolePermission = typeof rolePermissions.$inferSelect;\nexport type InsertRolePermission = typeof rolePermissions.$inferInsert;\n\n/**\n * Type for CASL rule representation (used in API responses)\n */\nexport interface CaslRule {\n action: string;\n subject: string;\n fields?: string[] | null;\n conditions?: Record<string, unknown> | null;\n inverted?: boolean;\n}\n","/**\n * Permissions Database Schema\n *\n * Drizzle ORM table definitions for capability definitions.\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport { pgTable, text, timestamp } from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\n\n// ============================================================\n// Permissions Table\n// ============================================================\n\n/**\n * Permissions Table\n *\n * Stores capability definitions (Core + Plugin).\n */\nexport const permissions = pgTable('permissions', {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n capability: text('capability').notNull().unique(),\n source: text('source').notNull(), // 'core' | pluginId\n description: text('description'),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n});\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const permissionSchema = createInsertSchema(permissions);\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type Permission = typeof permissions.$inferSelect;\nexport type InsertPermission = typeof permissions.$inferInsert;\n\n/**\n * Role-Permission Mapping (MVP: In-memory constant)\n *\n * Maps roles to capabilities. In production, this would be a database table.\n */\nexport const ROLE_PERMISSIONS: Record<string, string[]> = {\n owner: ['*:*:*'],\n admin: ['organization:*:*', 'plugin:*:*', 'user:manage:*', 'content:*:*'],\n editor: ['content:create:space', 'content:update:own', 'content:read:*'],\n member: ['content:read:space', 'content:comment:*'],\n viewer: ['content:read:public'],\n};\n","/**\n * Menus Database Schema\n *\n * Drizzle ORM table definitions for navigation menus.\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport {\n pgTable,\n text,\n integer,\n timestamp,\n jsonb,\n index,\n uniqueIndex,\n boolean,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { z } from 'zod/v4';\nimport { organization } from './auth';\nimport { paginationSchema } from './common';\n\n// ============================================================\n// Types\n// ============================================================\n\nexport type MenuType = 'system' | 'custom';\nexport type MenuOpenMode = 'route' | 'external';\nexport type MenuTarget = 'admin' | 'web';\n\n// ============================================================\n// Menus Table\n// ============================================================\n\n/**\n * Menus Table (Future-Ready Design for Plan D)\n *\n * Single-Table approach with code-based logical references:\n * - `code`: Logical identifier (e.g., 'dashboard', 'settings')\n * - `parent_code`: Hierarchy reference using code\n * - `organization_id`: Scope (NULL = global template, UUID = organization-specific)\n *\n * Menu Types:\n * - type='system': Core/Plugin menus (from global templates)\n * - type='custom': Organization-created menus\n *\n * Resolution Strategy:\n * 1. Merge global (organization_id=NULL) and organization-specific items\n * 2. Organization item with same code overrides global (Copy-on-Write)\n * 3. Auto-Inbox: Orphaned system menus go to SYS_INBOX\n */\nexport const menus = pgTable(\n 'menus',\n {\n // Primary key (UUID for database)\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n // Logical identifier (stable across tenants)\n // Format: 'core:dashboard', 'plugin:blog:posts', 'custom:my-menu'\n code: text('code').notNull(),\n\n // Menu Type\n type: text('type').notNull().$type<MenuType>(), // system = core/plugin, custom = tenant-created\n\n // Source (for system menus: 'core' | pluginId)\n source: text('source').notNull(), // 'core' | pluginId | 'custom'\n\n // FK to organization table (nullable: NULL = global template, value = organization-specific)\n organizationId: text('organization_id')\n .references(() => organization.id, { onDelete: 'cascade' }),\n\n // Menu Display\n label: text('label').notNull(),\n icon: text('icon'),\n path: text('path'), // NULL for directory menus\n openMode: text('open_mode').notNull().default('route').$type<MenuOpenMode>(),\n\n // Hierarchy (using code for logical reference)\n parentCode: text('parent_code'), // NULL = root level, 'SYS_INBOX' = orphaned\n order: integer('order').notNull().default(0),\n\n // Visibility Control\n visible: boolean('visible').notNull().default(true), // Tenant can hide menus\n\n // Permission Control\n requiredPermission: text('required_permission'),\n\n // Target Application\n target: text('target').notNull().$type<MenuTarget>(),\n\n // Extensibility\n metadata: jsonb('metadata'),\n\n // Timestamps\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at').notNull().defaultNow(),\n },\n (table) => [\n // Unique constraint: code + organizationId (allows same code in different organizations)\n uniqueIndex('menus_code_org_idx').on(table.code, table.organizationId),\n // Query optimization indexes\n index('menus_org_idx').on(table.organizationId),\n index('menus_source_org_idx').on(table.source, table.organizationId),\n index('menus_target_idx').on(table.target),\n index('menus_parent_code_idx').on(table.parentCode),\n index('menus_type_idx').on(table.type),\n ],\n);\n\n// ============================================================\n// Constants\n// ============================================================\n\n/**\n * Virtual Inbox code for orphaned system menus\n * When a system menu's parent is deleted/hidden, it moves here\n */\nexport const SYS_INBOX_CODE = 'SYS_INBOX';\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\n/** Base Schema - 直接用于 Create/Update */\nexport const menuSchema = createInsertSchema(menus);\n\n// ============================================================\n// Query Schemas\n// ============================================================\n\n/** Get menu by code */\nexport const getMenuQuery = z.object({\n code: z.string(),\n});\n\n/** List menus for sidebar */\nexport const listMenusQuery = z.object({\n target: z.enum(['admin', 'web']),\n});\n\n/** List all menus for admin management */\nexport const listAllMenusQuery = z.object({\n target: z.enum(['admin', 'web']).optional(),\n}).merge(paginationSchema.partial());\n\n// ============================================================\n// Mutation Schemas\n// ============================================================\n\n/** Delete menu mutation */\nexport const deleteMenuMutation = z.object({\n code: z.string(),\n});\n\n/** Toggle visibility mutation */\nexport const toggleMenuVisibilityMutation = z.object({\n code: z.string(),\n visible: z.boolean(),\n});\n\n/** Schema for creating a menu (used by menu.service) */\nexport const createMenuSchema = menuSchema.pick({\n code: true,\n label: true,\n path: true,\n icon: true,\n openMode: true,\n parentCode: true,\n order: true,\n target: true,\n metadata: true,\n}).extend({\n openMode: z.enum(['route', 'external']).optional(),\n target: z.enum(['admin', 'web']),\n});\n\n/** Schema for updating a menu (all fields optional, used by menu.service) */\nexport const updateMenuSchema = menuSchema.pick({\n label: true,\n icon: true,\n path: true,\n openMode: true,\n parentCode: true,\n order: true,\n visible: true,\n metadata: true,\n}).partial().extend({\n openMode: z.enum(['route', 'external']).optional(),\n});\n\n/** Update menu mutation (code for identification + partial fields) */\nexport const updateMenuMutation = menuSchema\n .omit({\n id: true,\n createdAt: true,\n updatedAt: true,\n })\n .partial()\n .extend({\n code: z.string(), // Required for identification\n });\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type Menu = typeof menus.$inferSelect;\nexport type InsertMenu = typeof menus.$inferInsert;\n","/**\n * Plugins Database Schema\n *\n * Drizzle ORM table definitions for plugin management.\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport {\n boolean,\n index,\n pgTable,\n text,\n timestamp,\n jsonb,\n uniqueIndex,\n varchar,\n} from 'drizzle-orm/pg-core';\nimport { sql } from 'drizzle-orm';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { z } from 'zod';\nimport { organization } from './auth';\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * Plugin Status\n */\nexport type PluginStatus =\n | 'enabled'\n | 'disabled'\n | 'crashed'\n | 'invalid'\n | 'archived'\n | 'uninstalled';\n\nexport type PluginInstallationStatus = 'installed' | 'uninstalled' | 'suspended';\nexport type PluginActivationStatus = 'enabled' | 'disabled';\n\n/**\n * Instance-level plugin status.\n *\n * This models whether the current deployment instance has the plugin\n * activated and available at runtime.\n */\nexport type PluginInstanceStatus = 'installed' | 'loaded' | 'failed';\n\nexport const PLUGIN_MARKETPLACE_STATES = [\n 'draft',\n 'published',\n 'archived',\n 'suspended',\n 'removed',\n] as const;\nexport type PluginMarketplaceState = (typeof PLUGIN_MARKETPLACE_STATES)[number];\n\nexport const PLUGIN_TRUST_LEVELS = ['first_party', 'third_party'] as const;\nexport type PluginTrustLevel = (typeof PLUGIN_TRUST_LEVELS)[number];\n\nexport const PLUGIN_INSTALL_OPERATIONS = ['install', 'update', 'uninstall', 'rollback'] as const;\nexport type PluginInstallOperation = (typeof PLUGIN_INSTALL_OPERATIONS)[number];\n\nexport const PLUGIN_INSTALL_SOURCES = ['registry', 'upload', 'system'] as const;\nexport type PluginInstallSource = (typeof PLUGIN_INSTALL_SOURCES)[number];\n\nexport const PLUGIN_INSTALL_JOB_STATUSES = [\n 'queued',\n 'validating',\n 'staging',\n 'awaiting_reload',\n 'succeeded',\n 'failed',\n 'rolled_back',\n] as const;\nexport type PluginInstallJobStatus = (typeof PLUGIN_INSTALL_JOB_STATUSES)[number];\n\n/**\n * Plugin Manifest interface (simplified for packages/db)\n * Full type is defined in @wordrhyme/plugin\n */\nexport interface PluginManifestBase {\n id: string;\n name: string;\n version: string;\n description?: string;\n author?: string;\n [key: string]: unknown;\n}\n\n// ============================================================\n// Plugins Table\n// ============================================================\n\n/**\n * Plugins Table\n *\n * Stores tenant-scoped plugin installation and activation state.\n *\n * In the default Shopify-first governance model:\n * - this table controls tenant availability and activation only\n * - schema migration ownership remains instance-scoped\n */\nexport const plugins = pgTable(\n 'plugins',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n pluginId: text('plugin_id').notNull(),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n version: text('version').notNull(),\n installationStatus: text('installation_status')\n .notNull()\n .$type<PluginInstallationStatus>()\n .default('installed'),\n activationStatus: text('activation_status')\n .notNull()\n .$type<PluginActivationStatus>()\n .default('enabled'),\n status: text('status').notNull().$type<PluginStatus>(),\n manifest: jsonb('manifest').notNull().$type<PluginManifestBase>(),\n installedAt: timestamp('installed_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at').notNull().defaultNow(),\n scheduledDeletionAt: timestamp('scheduled_deletion_at'),\n },\n (table) => [\n uniqueIndex('unique_plugin_per_org').on(table.organizationId, table.pluginId),\n index('plugins_plugin_installation_idx').on(\n table.pluginId,\n table.installationStatus,\n table.organizationId,\n ),\n ],\n);\n\n/**\n * Plugin Instances Table\n *\n * Stores plugin availability for the current running instance.\n *\n * This is intentionally separate from the tenant-scoped `plugins` table:\n * - `plugin_instances` answers \"is the plugin loaded for this deployment?\"\n * - `plugins` answers \"is the plugin installed/enabled for this tenant?\"\n */\nexport const pluginInstances = pgTable(\n 'plugin_instances',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n pluginId: text('plugin_id').notNull(),\n version: text('version').notNull(),\n status: text('status').notNull().$type<PluginInstanceStatus>(),\n manifest: jsonb('manifest').notNull().$type<PluginManifestBase>(),\n installedAt: timestamp('installed_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at').notNull().defaultNow(),\n },\n (table) => [\n uniqueIndex('unique_plugin_per_instance').on(table.pluginId),\n ],\n);\n\n// ============================================================\n// Plugin Registry and Installation\n// ============================================================\n\n/**\n * Local cache of immutable releases advertised by the deployment-bound Registry.\n * sourceId is a stable provenance label, not a database-owned Registry configuration.\n */\nexport const pluginCatalogReleases = pgTable(\n 'plugin_catalog_releases',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n sourceId: text('source_id').notNull(),\n pluginId: varchar('plugin_id', { length: 160 }).notNull(),\n version: varchar('version', { length: 80 }).notNull(),\n state: varchar('state', { length: 20, enum: PLUGIN_MARKETPLACE_STATES })\n .notNull()\n .$type<PluginMarketplaceState>(),\n trustLevel: varchar('trust_level', { length: 20, enum: PLUGIN_TRUST_LEVELS })\n .notNull()\n .$type<PluginTrustLevel>(),\n manifest: jsonb('manifest').notNull().$type<PluginManifestBase>(),\n release: jsonb('release').notNull().$type<Record<string, unknown>>(),\n artifactUrl: text('artifact_url').notNull(),\n artifactSha256: varchar('artifact_sha256', { length: 64 }).notNull(),\n publisherId: varchar('publisher_id', { length: 160 }),\n releaseSha256: varchar('release_sha256', { length: 64 }),\n publisherSignature: jsonb('publisher_signature').$type<Record<string, unknown>>(),\n registrySignature: jsonb('registry_signature').$type<Record<string, unknown>>(),\n /** @deprecated Legacy alias for publisherSignature. */\n signature: jsonb('signature').$type<Record<string, unknown>>(),\n publishedAt: timestamp('published_at').notNull(),\n fetchedAt: timestamp('fetched_at').notNull().defaultNow(),\n },\n (table) => [\n uniqueIndex('plugin_catalog_release_unique').on(table.sourceId, table.pluginId, table.version),\n index('plugin_catalog_release_lookup_idx').on(table.pluginId, table.state, table.publishedAt),\n ],\n);\n\n/** Last verified Registry snapshot committed for each deployment-bound source. */\nexport const pluginRegistrySyncState = pgTable('plugin_registry_sync_state', {\n sourceId: text('source_id').primaryKey(),\n snapshotId: varchar('snapshot_id', { length: 160 }).notNull(),\n generatedAt: timestamp('generated_at').notNull(),\n fetchedAt: timestamp('fetched_at').notNull().defaultNow(),\n});\n\n/**\n * Durable instance-level install/update/uninstall orchestration state.\n */\nexport const pluginInstallJobs = pgTable(\n 'plugin_install_jobs',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n pluginId: varchar('plugin_id', { length: 160 }).notNull(),\n operation: varchar('operation', { length: 20, enum: PLUGIN_INSTALL_OPERATIONS })\n .notNull()\n .$type<PluginInstallOperation>(),\n source: varchar('source', { length: 20, enum: PLUGIN_INSTALL_SOURCES })\n .notNull()\n .$type<PluginInstallSource>(),\n sourceId: text('source_id'),\n releaseId: text('release_id')\n .references(() => pluginCatalogReleases.id, { onDelete: 'set null' }),\n previousVersion: varchar('previous_version', { length: 80 }),\n targetVersion: varchar('target_version', { length: 80 }),\n status: varchar('status', { length: 24, enum: PLUGIN_INSTALL_JOB_STATUSES })\n .notNull()\n .$type<PluginInstallJobStatus>()\n .default('queued'),\n artifactSha256: varchar('artifact_sha256', { length: 64 }),\n requestedBy: text('requested_by').notNull(),\n errorCode: varchar('error_code', { length: 80 }),\n errorMessage: text('error_message'),\n metadata: jsonb('metadata').notNull().$type<Record<string, unknown>>().default({}),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at').notNull().defaultNow(),\n completedAt: timestamp('completed_at'),\n },\n (table) => [\n uniqueIndex('plugin_install_jobs_active_plugin_uidx')\n .on(table.pluginId)\n .where(sql`${table.status} IN ('queued', 'validating', 'staging', 'awaiting_reload')`),\n index('plugin_install_jobs_plugin_idx').on(table.pluginId, table.createdAt),\n index('plugin_install_jobs_status_idx').on(table.status, table.createdAt),\n ],\n);\n\n// ============================================================\n// Plugin Configs Table\n// ============================================================\n\n/**\n * Plugin Configs Table\n *\n * Stores plugin configuration (key-value) per organization.\n */\nexport const pluginConfigs = pgTable(\n 'plugin_configs',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n pluginId: text('plugin_id').notNull(),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n key: text('key').notNull(),\n value: jsonb('value').notNull(),\n updatedAt: timestamp('updated_at').notNull().defaultNow(),\n },\n (table) => [\n uniqueIndex('unique_config_key').on(\n table.organizationId,\n table.pluginId,\n table.key,\n ),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const pluginSchema = createInsertSchema(plugins);\nexport const pluginInstanceSchema = createInsertSchema(pluginInstances);\nexport const pluginCatalogReleaseSchema = createInsertSchema(pluginCatalogReleases, {\n artifactUrl: () => z.url(),\n artifactSha256: () => z.string().regex(/^[a-f0-9]{64}$/),\n});\nexport const pluginInstallJobSchema = createInsertSchema(pluginInstallJobs);\nexport const pluginConfigSchema = createInsertSchema(pluginConfigs);\n\nexport const listPluginCatalogQuery = z.object({\n query: z.string().trim().min(1).max(120).optional(),\n limit: z.number().int().min(1).max(100).default(20),\n offset: z.number().int().nonnegative().default(0),\n});\n\nexport const installPluginFromRegistryMutation = z.object({\n pluginId: z.string().regex(/^[a-z][a-z0-9-]*(\\.[a-z][a-z0-9-]*)+$/),\n version: z.string().min(1).max(80),\n});\n\nexport const createPluginUploadMutation = z.object({\n pluginId: z.string().regex(/^[a-z][a-z0-9-]*(\\.[a-z][a-z0-9-]*)+$/),\n version: z.string().min(1).max(80),\n totalSize: z.number().int().positive().max(100 * 1024 * 1024),\n sha256: z.string().regex(/^[a-f0-9]{64}$/),\n});\n\nexport const appendPluginUploadMutation = z.object({\n uploadId: z.string().uuid(),\n offset: z.number().int().nonnegative(),\n chunkBase64: z.base64().min(1).max(1024 * 1024),\n});\n\nexport const completePluginUploadMutation = z.object({\n uploadId: z.string().uuid(),\n});\n\nexport const getPluginInstallJobQuery = pluginInstallJobSchema.pick({ id: true }).required();\nexport const uninstallPluginFromInstanceMutation = z.object({\n pluginId: z.string().regex(/^[a-z][a-z0-9-]*(\\.[a-z][a-z0-9-]*)+$/),\n retentionChoice: z.enum([\"retain\", \"archive\", \"delete\"]).optional(),\n confirmed: z.boolean().optional(),\n});\nexport const rollbackPluginInstallMutation = getPluginInstallJobQuery;\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type Plugin = typeof plugins.$inferSelect;\nexport type InsertPlugin = typeof plugins.$inferInsert;\nexport type PluginInstance = typeof pluginInstances.$inferSelect;\nexport type InsertPluginInstance = typeof pluginInstances.$inferInsert;\nexport type PluginCatalogRelease = typeof pluginCatalogReleases.$inferSelect;\nexport type InsertPluginCatalogRelease = typeof pluginCatalogReleases.$inferInsert;\nexport type PluginInstallJob = typeof pluginInstallJobs.$inferSelect;\nexport type InsertPluginInstallJob = typeof pluginInstallJobs.$inferInsert;\nexport type PluginConfig = typeof pluginConfigs.$inferSelect;\nexport type InsertPluginConfig = typeof pluginConfigs.$inferInsert;\n","/**\n * Plugin Migrations Database Schema\n *\n * Drizzle ORM table definitions for plugin migration tracking.\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport { pgTable, text, timestamp, uniqueIndex } from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { organization } from './auth';\n\n// ============================================================\n// Plugin Migrations Table\n// ============================================================\n\n/**\n * Plugin Migrations Table\n *\n * Tracks applied plugin database migrations by migration owner.\n *\n * Current runtime default:\n * - the `organization_id` column stores the instance migration owner key\n * - the reserved value `'default'` means \"current deployment instance\"\n *\n * This preserves the current table shape while the runtime model converges on\n * instance-scoped schema ownership.\n */\nexport const pluginMigrations = pgTable(\n 'plugin_migrations',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n pluginId: text('plugin_id').notNull(),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull(),\n migrationFile: text('migration_file').notNull(),\n appliedAt: timestamp('applied_at').notNull().defaultNow(),\n checksum: text('checksum').notNull(), // SHA256 of file content\n },\n (table) => [\n uniqueIndex('unique_plugin_migration').on(\n table.organizationId,\n table.pluginId,\n table.migrationFile,\n ),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const pluginMigrationSchema = createInsertSchema(pluginMigrations);\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type PluginMigration = typeof pluginMigrations.$inferSelect;\nexport type InsertPluginMigration = typeof pluginMigrations.$inferInsert;\n","/**\n * Entity extension standard projection schema.\n *\n * Core stores standard extension field values plus the read model needed for\n * list display/search/filter/sort. Plugins only need private tables when they\n * have their own derived business data.\n */\nimport {\n boolean,\n index,\n jsonb,\n numeric,\n pgTable,\n text,\n timestamp,\n uniqueIndex,\n varchar,\n} from 'drizzle-orm/pg-core';\nimport { organization } from './auth';\n\nexport const ENTITY_EXTENSION_VALUE_TYPES = [\n 'text',\n 'number',\n 'boolean',\n 'date',\n 'datetime',\n 'select',\n 'ref',\n 'json',\n] as const;\nexport type EntityExtensionValueType = (typeof ENTITY_EXTENSION_VALUE_TYPES)[number];\n\nexport const ENTITY_EXTENSION_PROJECTION_STATUSES = [\n 'active',\n 'stale',\n 'deleted',\n] as const;\nexport type EntityExtensionProjectionStatus = (typeof ENTITY_EXTENSION_PROJECTION_STATUSES)[number];\n\nexport const extProjection = pgTable(\n 'ext_projection',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n pluginId: text('plugin_id').notNull(),\n entity: varchar('entity', { length: 160 }).notNull(),\n entityId: text('entity_id').notNull(),\n field: varchar('field', { length: 80 }).notNull(),\n type: varchar('type', { length: 30 })\n .notNull()\n .$type<EntityExtensionValueType>(),\n valueText: text('value_text'),\n valueNumber: numeric('value_number'),\n valueBoolean: boolean('value_boolean'),\n valueDate: timestamp('value_date', { withTimezone: true }),\n valueJson: jsonb('value_json').$type<unknown>(),\n refEntity: varchar('ref_entity', { length: 160 }),\n refId: text('ref_id'),\n display: text('display'),\n search: text('search'),\n status: varchar('status', { length: 20 })\n .notNull()\n .$type<EntityExtensionProjectionStatus>()\n .default('active'),\n syncedAt: timestamp('synced_at', { withTimezone: true }).notNull().defaultNow(),\n createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),\n updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(),\n },\n (table) => [\n uniqueIndex('ext_projection_unique_field').on(\n table.organizationId,\n table.pluginId,\n table.entity,\n table.entityId,\n table.field,\n ),\n index('ext_projection_entity_idx').on(\n table.organizationId,\n table.entity,\n table.entityId,\n ),\n index('ext_projection_field_idx').on(\n table.organizationId,\n table.entity,\n table.field,\n table.status,\n ),\n index('ext_projection_ref_idx').on(\n table.organizationId,\n table.refEntity,\n table.refId,\n ),\n ],\n);\n\nexport type ExtProjection = typeof extProjection.$inferSelect;\nexport type InsertExtProjection = typeof extProjection.$inferInsert;\n","/**\n * Action Execution Journal Schema (AI Action Gateway)\n *\n * The gateway's own fail-closed execution ledger. Core audit is deliberately\n * fail-open (AUDIT_GOVERNANCE §7) and therefore cannot carry the guarantee that\n * every high-risk action is accountable: a target system can apply a change\n * while the audit write is lost. Journal writes are awaited and must succeed\n * BEFORE any external side effect.\n *\n * prepared → approval_pending → authorized → dispatched\n * ↘ denied | expired (terminal)\n * → succeeded | failed | unknown → reconciled\n *\n * `unknown` (target may have applied the change, response lost) is a first-class\n * state and must never be silently downgraded to `failed`.\n *\n * Two indexes carry the correctness guarantees:\n * - `nonce` unique → an approval token drives exactly one execution\n * - active partial unique → one in-flight execution per (org, action, args)\n */\nimport { index, integer, pgTable, text, timestamp, uniqueIndex, varchar } from 'drizzle-orm/pg-core';\nimport { sql } from 'drizzle-orm';\n\nexport const ACTION_JOURNAL_STATUSES = [\n 'prepared',\n 'approval_pending',\n 'authorized',\n 'dispatched',\n 'succeeded',\n 'failed',\n 'unknown',\n 'reconciled',\n 'denied',\n 'expired',\n] as const;\n\nexport type ActionJournalStatus = (typeof ACTION_JOURNAL_STATUSES)[number];\n\n/** Statuses that still occupy the in-flight slot for (org, action, args). */\nexport const ACTION_JOURNAL_ACTIVE_STATUSES = [\n 'prepared',\n 'approval_pending',\n 'authorized',\n 'dispatched',\n] as const;\n\nexport const actionExecutionJournal = pgTable(\n 'action_execution_journal',\n {\n id: text('id')\n .primaryKey()\n .default(sql`gen_random_uuid()`),\n organizationId: text('organization_id').notNull(),\n /** Authorizing subject. The only permission source (plan §4.3 B2). */\n principalUserId: text('principal_user_id').notNull(),\n /** Who initiated, e.g. `agent:<pluginId>`. Audit chain only, never authorization. */\n invoker: text('invoker').notNull(),\n /** Stable Action Contract id, decoupled from the procedure path. */\n actionId: text('action_id').notNull(),\n revision: integer('revision').notNull(),\n /** Canonicalized argument hash; binds the approval token to these arguments. */\n argsHash: text('args_hash').notNull(),\n /** Approval token nonce, or an `auto-` prefixed value for ungated executions. */\n nonce: text('nonce').notNull(),\n status: varchar('status', { length: 24, enum: ACTION_JOURNAL_STATUSES })\n .notNull()\n .$type<ActionJournalStatus>()\n .default('prepared'),\n attempt: integer('attempt').notNull().default(0),\n /** Target-system identifier used to reconcile `unknown` executions. */\n externalRef: text('external_ref'),\n errorCode: text('error_code'),\n /** Resolved verdict recorded by reconciliation. */\n outcome: text('outcome'),\n createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),\n updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(),\n dispatchedAt: timestamp('dispatched_at', { withTimezone: true }),\n terminalAt: timestamp('terminal_at', { withTimezone: true }),\n },\n (table) => [\n uniqueIndex('action_execution_journal_nonce_uidx').on(table.nonce),\n uniqueIndex('action_execution_journal_active_uidx')\n .on(table.organizationId, table.actionId, table.argsHash)\n .where(sql`${table.status} IN ('prepared','approval_pending','authorized','dispatched')`),\n index('action_execution_journal_status_idx').on(table.status, table.updatedAt),\n index('action_execution_journal_org_idx').on(table.organizationId, table.createdAt),\n ],\n);\n\n/**\n * Outbox for work that must survive a crash — reconciliation probes and retries.\n * Written in the same transaction as the journal transition it belongs to.\n */\nexport const actionExecutionOutbox = pgTable(\n 'action_execution_outbox',\n {\n id: text('id')\n .primaryKey()\n .default(sql`gen_random_uuid()`),\n journalId: text('journal_id')\n .notNull()\n .references(() => actionExecutionJournal.id, { onDelete: 'cascade' }),\n kind: text('kind').notNull(),\n availableAt: timestamp('available_at', { withTimezone: true }).notNull().defaultNow(),\n attempts: integer('attempts').notNull().default(0),\n lockedAt: timestamp('locked_at', { withTimezone: true }),\n lockToken: text('lock_token'),\n },\n (table) => [index('action_execution_outbox_available_idx').on(table.availableAt)],\n);\n\nexport type ActionExecutionJournal = typeof actionExecutionJournal.$inferSelect;\nexport type InsertActionExecutionJournal = typeof actionExecutionJournal.$inferInsert;\nexport type ActionExecutionOutbox = typeof actionExecutionOutbox.$inferSelect;\n","/**\n * Settings Database Schema\n *\n * Drizzle ORM table definitions for configuration storage.\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport {\n pgTable,\n text,\n timestamp,\n jsonb,\n index,\n boolean,\n integer,\n uniqueIndex,\n} from 'drizzle-orm/pg-core';\nimport { sql } from 'drizzle-orm';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { z } from 'zod/v4';\nimport { organization } from './auth';\nimport { paginationSchema } from './common';\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * Setting Scope Types\n *\n * - global: Platform-wide configuration\n * - tenant: Organization-specific configuration\n * - plugin_global: Plugin's global configuration\n * - plugin_tenant: Plugin's organization-specific configuration\n */\nexport type SettingScope =\n | 'global'\n | 'tenant'\n | 'plugin_global'\n | 'plugin_tenant';\n\n/**\n * Setting Value Types\n */\nexport type SettingValueType = 'string' | 'number' | 'boolean' | 'json';\n\n/**\n * Encrypted Value Structure\n */\nexport interface EncryptedValue {\n ciphertext: string; // Base64 encoded\n iv: string; // 12 bytes, Base64\n authTag: string; // 16 bytes, Base64\n keyVersion: number; // Key version for rotation\n}\n\n// ============================================================\n// Settings Table\n// ============================================================\n\n/**\n * Settings Table\n *\n * Unified configuration storage with four-scope model.\n * Supports encrypted values for sensitive data.\n *\n * Field Matrix:\n * | Scope | scope_id | organization_id |\n * |----------------|--------------|----------------------|\n * | global | NULL | NULL |\n * | tenant | NULL | 'tenant-123' |\n * | plugin_global | 'my-plugin' | NULL |\n * | plugin_tenant | 'my-plugin' | 'tenant-123' |\n */\nexport const settings = pgTable(\n 'settings',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n // Scope identification\n scope: text('scope').notNull().$type<SettingScope>(),\n scopeId: text('scope_id'), // pluginId (only for plugin_* scopes)\n // FK to organization table (nullable - only for tenant and plugin_tenant scopes)\n organizationId: text('organization_id')\n .references(() => organization.id, { onDelete: 'cascade' }),\n\n // Setting data\n key: text('key').notNull(), // Setting key (e.g., \"email.smtp.host\")\n value: jsonb('value'), // Setting value (or EncryptedValue if encrypted)\n valueType: text('value_type').$type<SettingValueType>().default('string'),\n\n // Encryption\n encrypted: boolean('encrypted').notNull().default(false),\n\n // Schema version for migration support\n schemaVersion: integer('schema_version').notNull().default(1),\n\n // Metadata\n description: text('description'),\n\n // Audit fields\n createdBy: text('created_by'),\n updatedBy: text('updated_by'),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at')\n .notNull()\n .defaultNow()\n .$onUpdate(() => new Date()),\n },\n (table) => [\n // Unique constraint with COALESCE to handle NULL values\n uniqueIndex('idx_settings_unique').on(\n table.scope,\n sql`COALESCE(${table.scopeId}, '')`,\n sql`COALESCE(${table.organizationId}, '')`,\n table.key,\n ),\n // Index for scope + key queries\n index('idx_settings_scope_key').on(table.scope, table.key),\n // Index for tenant queries (partial)\n index('idx_settings_tenant').on(table.organizationId),\n // Index for plugin queries (partial)\n index('idx_settings_plugin').on(table.scopeId),\n ],\n);\n\n// ============================================================\n// Setting Schemas Table\n// ============================================================\n\n/**\n * Setting Schemas Table\n *\n * Defines JSON Schema validation for settings.\n * Supports wildcard patterns for matching multiple keys.\n */\nexport const settingSchemas = pgTable(\n 'setting_schemas',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n // Pattern matching (supports wildcards, e.g., \"email.*\" or \"plugin:*:api_key\")\n keyPattern: text('key_pattern').notNull(),\n\n // JSON Schema definition\n schema: jsonb('schema').notNull().$type<Record<string, unknown>>(),\n\n // Version for schema evolution\n version: integer('version').notNull().default(1),\n\n // Default value if setting doesn't exist\n defaultValue: jsonb('default_value'),\n\n // Metadata\n description: text('description'),\n deprecated: boolean('deprecated').notNull().default(false),\n\n createdAt: timestamp('created_at').notNull().defaultNow(),\n },\n (table) => [\n // Unique constraint on pattern + version\n uniqueIndex('idx_setting_schemas_pattern_version').on(\n table.keyPattern,\n table.version,\n ),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const settingScopeSchema = z.enum(['global', 'tenant', 'plugin_global', 'plugin_tenant']);\nexport const settingValueTypeSchema = z.enum(['string', 'number', 'boolean', 'json']);\n\nexport const settingSchema = createInsertSchema(settings);\nexport const settingSchemaSchema = createInsertSchema(settingSchemas);\n\n// ============================================================\n// Query Schemas\n// ============================================================\n\n/**\n * Get setting query - 获取单个配置\n */\nexport const getSettingQuery = settingSchema.pick({\n scope: true,\n key: true,\n organizationId: true,\n scopeId: true,\n}).extend({\n defaultValue: z.unknown().optional(),\n});\n\n/**\n * List settings query - 列表查询配置\n */\nexport const listSettingsQuery = settingSchema\n .pick({\n scope: true,\n organizationId: true,\n scopeId: true,\n })\n .merge(paginationSchema)\n .extend({\n keyPrefix: z.string().optional(),\n });\n\n/**\n * Set setting mutation - 设置配置值\n */\nexport const setSettingMutation = settingSchema.pick({\n scope: true,\n key: true,\n value: true,\n organizationId: true,\n scopeId: true,\n encrypted: true,\n description: true,\n valueType: true,\n});\n\n/**\n * Delete setting mutation - 删除配置\n */\nexport const deleteSettingMutation = settingSchema.pick({\n scope: true,\n key: true,\n organizationId: true,\n scopeId: true,\n});\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type Setting = typeof settings.$inferSelect;\nexport type InsertSetting = typeof settings.$inferInsert;\nexport type SettingSchemaType = typeof settingSchemas.$inferSelect;\n/** @alias SettingSchemaType - backward compatibility */\nexport type SettingSchema = SettingSchemaType;\nexport type InsertSettingSchema = typeof settingSchemas.$inferInsert;\n\n/**\n * Get options for retrieving settings\n */\nexport interface GetSettingOptions {\n organizationId?: string | undefined;\n scopeId?: string | undefined; // pluginId for plugin scopes\n defaultValue?: unknown;\n}\n\n/**\n * Set options for storing settings\n */\nexport interface SetSettingOptions {\n organizationId?: string | undefined;\n scopeId?: string | undefined; // pluginId for plugin scopes\n encrypted?: boolean | undefined;\n description?: string | undefined;\n valueType?: SettingValueType | undefined;\n}\n\n/**\n * List options for querying settings\n */\nexport interface ListSettingsOptions {\n organizationId?: string | undefined;\n scopeId?: string | undefined;\n keyPrefix?: string | undefined;\n includeEncrypted?: boolean | undefined;\n}\n","/**\n * Feature Flags Database Schema\n *\n * Drizzle ORM table definitions for feature flag management.\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport {\n pgTable,\n text,\n timestamp,\n jsonb,\n index,\n boolean,\n integer,\n uniqueIndex,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { z } from 'zod/v4';\nimport { organization } from './auth';\nimport { paginationSchema } from './common';\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * Feature Flag Condition Types\n */\nexport type ConditionType =\n | 'user_role'\n | 'tenant_plan'\n | 'user_id'\n | 'percentage';\n\nexport type ConditionOperator = 'eq' | 'neq' | 'in' | 'nin' | 'gt' | 'lt' | 'gte' | 'lte';\n\n/**\n * Feature Flag Condition\n */\nexport interface FlagCondition {\n type: ConditionType;\n operator: ConditionOperator;\n value?: unknown;\n}\n\n// ============================================================\n// Feature Flags Table\n// ============================================================\n\n/**\n * Feature Flags Table\n *\n * Platform-level feature flag definitions.\n * Supports conditions and rollout percentages.\n */\nexport const featureFlags = pgTable(\n 'feature_flags',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n // Identification\n key: text('key').notNull().unique(), // Unique flag key (e.g., \"dark_mode\", \"ai_features\")\n name: text('name').notNull(), // Display name\n\n // Configuration\n description: text('description'),\n enabled: boolean('enabled').notNull().default(false),\n\n // Rollout configuration\n rolloutPercentage: integer('rollout_percentage').notNull().default(100), // 0-100\n\n // Condition rules (evaluated in order, all must pass)\n conditions: jsonb('conditions')\n .notNull()\n .default([])\n .$type<FlagCondition[]>(),\n\n // Audit fields\n createdBy: text('created_by'),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at')\n .notNull()\n .defaultNow()\n .$onUpdate(() => new Date()),\n },\n (table) => [index('idx_feature_flags_key').on(table.key)],\n);\n\n// ============================================================\n// Feature Flag Overrides Table\n// ============================================================\n\n/**\n * Feature Flag Overrides Table\n *\n * Tenant-level overrides for feature flags.\n * Allows per-tenant configuration of global flags.\n */\nexport const featureFlagOverrides = pgTable(\n 'feature_flag_overrides',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n // References\n flagId: text('flag_id')\n .notNull()\n .references(() => featureFlags.id, { onDelete: 'cascade' }),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n\n // Override configuration\n enabled: boolean('enabled').notNull(),\n rolloutPercentage: integer('rollout_percentage'), // NULL means use global value\n conditions: jsonb('conditions').$type<FlagCondition[]>(), // NULL means use global conditions\n\n // Audit fields\n createdBy: text('created_by'),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n },\n (table) => [\n // Unique constraint: one override per flag per tenant\n uniqueIndex('idx_ff_overrides_flag_tenant').on(table.flagId, table.organizationId),\n // Index for tenant lookups\n index('idx_ff_overrides_tenant').on(table.organizationId),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\n/** Flag condition schema */\nexport const flagConditionSchema = z.object({\n type: z.enum(['user_role', 'tenant_plan', 'user_id', 'percentage']),\n operator: z.enum(['eq', 'neq', 'in', 'nin', 'gt', 'lt', 'gte', 'lte']),\n value: z.unknown(),\n});\n\n/** Base Schema - 直接用于 Create/Update */\nexport const featureFlagSchema = createInsertSchema(featureFlags);\nexport const featureFlagOverrideSchema = createInsertSchema(featureFlagOverrides);\n\n/**\n * Backward-compatible tenant/org input:\n * - New field: organizationId\n * - Legacy field: tenantId\n */\nconst organizationInputSchema = z\n .object({\n organizationId: z.string().min(1).optional(),\n tenantId: z.string().min(1).optional(),\n })\n .refine((data) => !!(data.organizationId ?? data.tenantId), {\n message: 'organizationId is required',\n path: ['organizationId'],\n })\n .transform((data) => ({\n organizationId: data.organizationId ?? data.tenantId!,\n }));\n\n// ============================================================\n// Query Schemas\n// ============================================================\n\n/** Check if a feature flag is enabled */\nexport const checkFeatureFlagQuery = z.object({\n key: z.string(),\n organizationId: z.string().optional(),\n tenantId: z.string().optional(),\n userId: z.string().optional(),\n userRole: z.string().optional(),\n tenantPlan: z.string().optional(),\n}).transform((data) => ({\n ...data,\n organizationId: data.organizationId ?? data.tenantId,\n}));\n\n/** Get feature flag by key */\nexport const getFeatureFlagQuery = z.object({\n key: z.string().min(1),\n});\n\n/** List feature flags */\nexport const listFeatureFlagsQuery = paginationSchema.partial();\n\n/** List overrides for a tenant */\nexport const listFlagOverridesQuery = z.object({\n organizationId: z.string().min(1).optional(),\n tenantId: z.string().min(1).optional(),\n})\n .refine((data) => !!(data.organizationId ?? data.tenantId), {\n message: 'organizationId is required',\n path: ['organizationId'],\n })\n .transform((data) => ({\n organizationId: data.organizationId ?? data.tenantId!,\n }));\n\n// ============================================================\n// Mutation Schemas\n// ============================================================\n\n/** Update feature flag mutation (id for identification + partial fields) */\nexport const updateFeatureFlagMutation = featureFlagSchema\n .omit({\n id: true,\n createdAt: true,\n updatedAt: true,\n })\n .partial()\n .extend({\n id: z.string(), // Required for identification\n });\n\n/** Delete feature flag mutation */\nexport const deleteFeatureFlagMutation = z.object({\n id: z.string().uuid(),\n});\n\n/** Set flag override mutation */\nexport const setFlagOverrideMutation = z.object({\n flagKey: z.string(),\n organizationId: z.string().optional(),\n tenantId: z.string().optional(),\n enabled: z.boolean(),\n rolloutPercentage: z.number().min(0).max(100).optional(),\n conditions: z.array(flagConditionSchema).optional(),\n}).and(organizationInputSchema)\n .transform((data) => ({\n flagKey: data.flagKey,\n organizationId: data.organizationId,\n enabled: data.enabled,\n rolloutPercentage: data.rolloutPercentage,\n conditions: data.conditions,\n }));\n\n/** Remove flag override mutation */\nexport const removeFlagOverrideMutation = z.object({\n flagKey: z.string(),\n organizationId: z.string().optional(),\n tenantId: z.string().optional(),\n}).and(organizationInputSchema)\n .transform((data) => ({\n flagKey: data.flagKey,\n organizationId: data.organizationId,\n }));\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type FeatureFlag = typeof featureFlags.$inferSelect;\nexport type InsertFeatureFlag = typeof featureFlags.$inferInsert;\nexport type FeatureFlagOverride = typeof featureFlagOverrides.$inferSelect;\nexport type InsertFeatureFlagOverride = typeof featureFlagOverrides.$inferInsert;\n\n/**\n * Feature Flag Evaluation Context\n */\nexport interface FlagEvaluationContext {\n organizationId: string;\n userId: string;\n userRole?: string | undefined;\n tenantPlan?: string | undefined;\n [key: string]: unknown;\n}\n\n/**\n * Feature Flag Check Result\n */\nexport interface FlagCheckResult {\n enabled: boolean;\n source: 'global' | 'override';\n evaluatedConditions?: boolean;\n rolloutIncluded?: boolean;\n}\n","/**\n * Media Database Schema\n *\n * Unified table for content assets (images, videos, documents).\n * Replaces the separate `files` + `assets` tables.\n * Variants are stored as self-referencing rows via `parent_id`.\n *\n * System files (exports, imports, temp) do NOT belong here.\n */\nimport {\n pgTable,\n text,\n timestamp,\n boolean,\n bigint,\n integer,\n jsonb,\n index,\n uniqueIndex,\n check,\n type AnyPgColumn,\n} from 'drizzle-orm/pg-core';\nimport { sql } from 'drizzle-orm';\nimport { createInsertSchema, createSelectSchema } from 'drizzle-orm/zod';\nimport { z } from 'zod';\nimport { organization } from './auth';\n\n// ============================================================\n// Types\n// ============================================================\n\nexport type StorageProviderType = 'local' | 'minio' | string;\n\n// ============================================================\n// Media Table\n// ============================================================\n\nexport const media = pgTable(\n 'media',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n\n // Self-reference: variants point to their original media\n parentId: text('parent_id').references((): AnyPgColumn => media.id, { onDelete: 'cascade' }),\n variantName: text('variant_name'),\n\n // File information\n filename: text('filename').notNull(),\n mimeType: text('mime_type').notNull(),\n size: bigint('size', { mode: 'number' }).notNull().default(0),\n\n // Storage information\n storageProvider: text('storage_provider').notNull().$type<StorageProviderType>(),\n storageKey: text('storage_key').notNull(),\n storageBucket: text('storage_bucket'),\n\n // Public access\n publicUrl: text('public_url'),\n isPublic: boolean('is_public').notNull().default(false),\n\n // Integrity\n checksum: text('checksum'),\n\n // Image-specific (null for non-image media)\n width: integer('width'),\n height: integer('height'),\n format: text('format'),\n\n // CMS semantics\n alt: text('alt'),\n title: text('title'),\n tags: text('tags').array().default([]),\n folderPath: text('folder_path'),\n\n // Extensible metadata\n metadata: jsonb('metadata').$type<Record<string, unknown>>().default({}),\n\n // Audit\n createdBy: text('created_by').notNull(),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at')\n .notNull()\n .defaultNow()\n .$onUpdate(() => new Date()),\n deletedAt: timestamp('deleted_at'),\n },\n (table) => [\n // Storage key uniqueness per tenant\n uniqueIndex('media_storage_unique').on(\n table.organizationId,\n table.storageProvider,\n table.storageKey,\n ),\n // Variant name uniqueness per parent\n uniqueIndex('media_parent_variant_unique')\n .on(table.parentId, table.variantName)\n .where(sql`${table.parentId} IS NOT NULL`),\n // Prevent self-referencing\n check('media_no_self_ref', sql`${table.parentId} IS DISTINCT FROM ${table.id}`),\n // Query indexes\n index('idx_media_org_folder')\n .on(table.organizationId, table.folderPath)\n .where(sql`${table.deletedAt} IS NULL`),\n index('idx_media_org_mime')\n .on(table.organizationId, table.mimeType)\n .where(sql`${table.deletedAt} IS NULL`),\n index('idx_media_parent')\n .on(table.parentId)\n .where(sql`${table.parentId} IS NOT NULL`),\n index('idx_media_tags')\n .using('gin', table.tags)\n .where(sql`${table.deletedAt} IS NULL`),\n index('idx_media_org_created')\n .on(table.organizationId, table.createdAt)\n .where(sql`${table.deletedAt} IS NULL`),\n index('idx_media_deleted')\n .on(table.deletedAt)\n .where(sql`${table.deletedAt} IS NOT NULL`),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const mediaInsertSchema = createInsertSchema(media);\nexport const mediaSelectSchema = createSelectSchema(media);\n\nexport const importMediaFromUrlMutation = z.object({\n url: z.string().trim().url().max(2048),\n providerId: z.string().trim().min(1).max(100).optional(),\n});\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type Media = typeof media.$inferSelect;\nexport type InsertMedia = typeof media.$inferInsert;\n/** @alias Media - backward compatibility for code referencing the old `files` table */\nexport type File = Media;\n","/**\n * Web Design Database Schema\n *\n * Stores tenant-scoped public web page design documents. The document payload is\n * the Designable/Formily transformer output; platform metadata lives beside it.\n */\nimport {\n boolean,\n index,\n jsonb,\n pgTable,\n text,\n timestamp,\n uniqueIndex,\n varchar,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema, createSelectSchema } from 'drizzle-orm/zod';\nimport { z } from 'zod';\nimport { organization } from './auth';\n\nexport const WEB_PAGE_STATUSES = ['draft', 'published', 'archived'] as const;\nexport type WebPageStatus = (typeof WEB_PAGE_STATUSES)[number];\nexport const WEB_DOMAIN_STATUSES = ['pending', 'verified', 'active', 'disabled'] as const;\nexport type WebDomainStatus = (typeof WEB_DOMAIN_STATUSES)[number];\nexport const WEB_DOMAIN_CERTIFICATE_STATUSES = [\n 'not_requested',\n 'requested',\n 'provisioning',\n 'active',\n 'failed',\n] as const;\nexport type WebDomainCertificateStatus = (typeof WEB_DOMAIN_CERTIFICATE_STATUSES)[number];\n\nexport const WEB_PAGE_RESERVED_PATHS = [\n '/favicon.ico',\n '/robots.txt',\n '/sitemap.xml',\n '/manifest.json',\n] as const;\n\nexport const WEB_PAGE_RESERVED_PREFIXES = [\n '/_next',\n '/api',\n '/assets',\n '/plugins',\n '/static',\n '/trpc',\n] as const;\n\nexport type WebDesignDocument = Record<string, unknown>;\n\nfunction normalizeWebPagePath(value: string): string {\n const normalized = value\n .trim()\n .replace(/^\\/?/, '/')\n .replace(/\\/+/g, '/')\n .replace(/\\/$/, '')\n .toLowerCase();\n\n return normalized || '/';\n}\n\nexport const webPages = pgTable(\n 'web_pages',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n\n title: text('title').notNull(),\n path: text('path').notNull(),\n status: varchar('status', { length: 24, enum: WEB_PAGE_STATUSES })\n .notNull()\n .default('draft'),\n\n routeId: text('route_id'),\n templateId: text('template_id'),\n seoTitle: text('seo_title'),\n seoDescription: text('seo_description'),\n\n document: jsonb('document')\n .notNull()\n .default({})\n .$type<WebDesignDocument>(),\n publishedDocument: jsonb('published_document').$type<WebDesignDocument | null>(),\n publishedAt: timestamp('published_at'),\n\n createdBy: text('created_by'),\n updatedBy: text('updated_by'),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at')\n .notNull()\n .defaultNow()\n .$onUpdate(() => new Date()),\n },\n (table) => [\n uniqueIndex('web_pages_org_path_uidx').on(table.organizationId, table.path),\n index('web_pages_org_status_idx').on(table.organizationId, table.status),\n index('web_pages_route_idx').on(table.routeId),\n ],\n);\n\nexport const webDomains = pgTable(\n 'web_domains',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n\n hostname: text('hostname').notNull(),\n status: varchar('status', { length: 24, enum: WEB_DOMAIN_STATUSES })\n .notNull()\n .default('pending'),\n isPrimary: boolean('is_primary').notNull().default(false),\n verificationToken: text('verification_token'),\n certificateStatus: varchar('certificate_status', { length: 24, enum: WEB_DOMAIN_CERTIFICATE_STATUSES })\n .notNull()\n .default('not_requested'),\n certificateRequestedAt: timestamp('certificate_requested_at'),\n certificateIssuedAt: timestamp('certificate_issued_at'),\n certificateError: text('certificate_error'),\n verificationDetails: jsonb('verification_details').$type<Record<string, unknown> | null>(),\n lastCheckedAt: timestamp('last_checked_at'),\n verifiedAt: timestamp('verified_at'),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at')\n .notNull()\n .defaultNow()\n .$onUpdate(() => new Date()),\n },\n (table) => [\n uniqueIndex('web_domains_hostname_uidx').on(table.hostname),\n index('web_domains_org_idx').on(table.organizationId),\n index('web_domains_status_idx').on(table.status),\n ],\n);\n\nexport const webPageSchema = createInsertSchema(webPages);\nexport const webPageSelectSchema = createSelectSchema(webPages);\nexport const webDomainSchema = createInsertSchema(webDomains);\nexport const webDomainSelectSchema = createSelectSchema(webDomains);\n\nfunction normalizeWebDomainHostname(value: string): string {\n return value.trim().toLowerCase().replace(/\\.$/, '');\n}\n\nfunction isValidWebDomainHostname(value: string): boolean {\n if (value.length > 253) return false;\n if (value.includes('/') || value.includes('\\\\') || value.includes(':')) return false;\n if (value === 'localhost' || value.endsWith('.localhost')) return false;\n if (/^\\d{1,3}(\\.\\d{1,3}){3}$/.test(value)) return false;\n\n const labels = value.split('.');\n if (labels.length < 2) return false;\n\n return labels.every((label) => (\n label.length > 0\n && label.length <= 63\n && /^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/.test(label)\n ));\n}\n\nexport const webDomainHostnameSchema = z\n .string()\n .trim()\n .min(1, 'Hostname is required')\n .max(253, 'Hostname must be 253 characters or less')\n .transform(normalizeWebDomainHostname)\n .refine((hostname) => !/^[a-z][a-z\\d+\\-.]*:\\/\\//i.test(hostname), {\n message: 'Hostname must not include a protocol',\n })\n .refine(isValidWebDomainHostname, {\n message: 'Hostname must be a valid public domain name',\n });\n\nexport const webPagePathSchema = z\n .string()\n .trim()\n .min(1, 'Path is required')\n .max(200, 'Path must be 200 characters or less')\n .transform(normalizeWebPagePath)\n .refine((path) => !WEB_PAGE_RESERVED_PATHS.includes(path as (typeof WEB_PAGE_RESERVED_PATHS)[number]), {\n message: 'Path is reserved by the web host',\n })\n .refine((path) => !WEB_PAGE_RESERVED_PREFIXES.some((prefix) => path === prefix || path.startsWith(`${prefix}/`)), {\n message: 'Path uses a reserved system prefix',\n })\n .refine((path) => path === '/' || /^\\/[a-z0-9][a-z0-9/_-]*$/.test(path), {\n message: 'Path must use lowercase letters, numbers, dashes, underscores, and slashes',\n })\n .refine((path) => !path.split('/').some((segment) => segment === '.' || segment === '..'), {\n message: 'Path cannot contain dot segments',\n });\nexport const webDesignDocumentSchema = z.record(z.string(), z.unknown());\n\nexport const createWebPageMutation = webPageSchema\n .pick({\n title: true,\n path: true,\n status: true,\n routeId: true,\n templateId: true,\n seoTitle: true,\n seoDescription: true,\n })\n .extend({\n path: webPagePathSchema,\n });\n\nexport const updateWebPageMutation = createWebPageMutation.partial();\n\nexport const getWebPageDocumentQuery = webPageSelectSchema.pick({\n id: true,\n});\n\nexport const saveWebPageDocumentMutation = getWebPageDocumentQuery.extend({\n document: webDesignDocumentSchema,\n});\n\nexport const publishWebPageMutation = getWebPageDocumentQuery;\n\nexport const createWebDomainMutation = webDomainSchema\n .pick({\n hostname: true,\n })\n .extend({\n hostname: webDomainHostnameSchema,\n });\n\nexport const getWebDomainQuery = webDomainSelectSchema.pick({\n id: true,\n});\n\nexport const verifyWebDomainMutation = getWebDomainQuery;\nexport const requestWebDomainCertificateMutation = getWebDomainQuery;\n\nexport const updateWebDomainCertificateStatusMutation = getWebDomainQuery.extend({\n status: z.enum(WEB_DOMAIN_CERTIFICATE_STATUSES),\n error: z.string().trim().max(1000).optional(),\n});\n\nexport const setPrimaryWebDomainMutation = getWebDomainQuery;\nexport const disableWebDomainMutation = getWebDomainQuery;\nexport const deleteWebDomainMutation = getWebDomainQuery;\n\nexport type WebPage = typeof webPages.$inferSelect;\nexport type InsertWebPage = typeof webPages.$inferInsert;\nexport type WebDomain = typeof webDomains.$inferSelect;\nexport type InsertWebDomain = typeof webDomains.$inferInsert;\n","/**\n * Tenant Site Presentation Schema\n *\n * Core-owned tenant routing/presentation state. Theme code remains a normal\n * plugin; these tables persist the tenant's draft/history and the single\n * active published revision pointer even when the plugin cannot load.\n */\nimport { sql } from 'drizzle-orm';\nimport {\n check,\n foreignKey,\n index,\n integer,\n jsonb,\n pgTable,\n text,\n timestamp,\n uniqueIndex,\n varchar,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema, createSelectSchema } from 'drizzle-orm/zod';\nimport { z } from 'zod';\nimport { organization } from './auth';\nimport { paginationSchema } from './common';\n\nexport const WEB_THEME_REVISION_STATUSES = [\n 'draft',\n 'published',\n 'archived',\n 'invalid',\n] as const;\nexport type WebThemeRevisionStatus = (typeof WEB_THEME_REVISION_STATUSES)[number];\n\nexport const WEB_THEME_SELECTION_STATUSES = ['active', 'safe_mode'] as const;\nexport type WebThemeSelectionStatus = (typeof WEB_THEME_SELECTION_STATUSES)[number];\n\nexport type WebThemeHomeTarget =\n | { type: 'theme-route'; routeId: string }\n | { type: 'plugin-route'; pluginId: string; routeId: string }\n | { type: 'designer-page'; pageId: string }\n | { type: 'default' };\n\nexport type WebThemeJsonObject = Record<string, unknown>;\nexport type WebThemeAdapterSelection = {\n ownerPluginId: string;\n surfaceId: string;\n source: 'theme' | 'plugin' | 'owner';\n providerPluginId?: string | undefined;\n};\nexport type WebThemeAdapterConfig = {\n selections?: WebThemeAdapterSelection[] | undefined;\n providers?: Record<string, WebThemeJsonObject> | undefined;\n};\nexport type WebThemeCompatibilitySnapshot = {\n status: 'compatible' | 'degraded' | 'incompatible';\n generation: number;\n checkedAt: string;\n results: unknown[];\n};\n\nexport const webThemeRevisions = pgTable(\n 'web_theme_revisions',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n pluginId: varchar('plugin_id', { length: 160 }).notNull(),\n pluginVersion: varchar('plugin_version', { length: 80 }).notNull(),\n revision: integer('revision').notNull(),\n status: varchar('status', { length: 24, enum: WEB_THEME_REVISION_STATUSES })\n .notNull()\n .$type<WebThemeRevisionStatus>()\n .default('draft'),\n version: integer('version').notNull().default(1),\n homeTarget: jsonb('home_target')\n .notNull()\n .$type<WebThemeHomeTarget>()\n .default({ type: 'default' }),\n settings: jsonb('settings').notNull().$type<WebThemeJsonObject>().default({}),\n tokenOverrides: jsonb('token_overrides').notNull().$type<WebThemeJsonObject>().default({}),\n adapterConfig: jsonb('adapter_config').notNull().$type<WebThemeAdapterConfig>().default({}),\n embedConfig: jsonb('embed_config').notNull().$type<WebThemeJsonObject>().default({}),\n schemaVersions: jsonb('schema_versions')\n .notNull()\n .$type<Record<string, number>>()\n .default({}),\n compatibilitySnapshot: jsonb('compatibility_snapshot')\n .$type<WebThemeCompatibilitySnapshot | null>(),\n createdBy: text('created_by').notNull(),\n updatedBy: text('updated_by').notNull(),\n publishedBy: text('published_by'),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at')\n .notNull()\n .defaultNow()\n .$onUpdate(() => new Date()),\n publishedAt: timestamp('published_at'),\n },\n (table) => [\n uniqueIndex('web_theme_revisions_org_plugin_revision_uidx').on(\n table.organizationId,\n table.pluginId,\n table.revision,\n ),\n uniqueIndex('web_theme_revisions_org_id_uidx').on(table.organizationId, table.id),\n uniqueIndex('web_theme_revisions_one_draft_uidx')\n .on(table.organizationId, table.pluginId)\n .where(sql`${table.status} = 'draft'`),\n index('web_theme_revisions_org_plugin_history_idx').on(\n table.organizationId,\n table.pluginId,\n table.createdAt,\n ),\n index('web_theme_revisions_org_status_idx').on(table.organizationId, table.status),\n ],\n);\n\nexport const webThemeSelections = pgTable(\n 'web_theme_selections',\n {\n organizationId: text('organization_id')\n .primaryKey()\n .references(() => organization.id, { onDelete: 'cascade' }),\n activeRevisionId: text('active_revision_id'),\n previousRevisionId: text('previous_revision_id'),\n lastKnownCompatibleRevisionId: text('last_known_compatible_revision_id'),\n status: varchar('status', { length: 24, enum: WEB_THEME_SELECTION_STATUSES })\n .notNull()\n .$type<WebThemeSelectionStatus>()\n .default('active'),\n version: integer('version').notNull().default(1),\n diagnostics: jsonb('diagnostics').notNull().$type<unknown[]>().default([]),\n safeModeReason: text('safe_mode_reason'),\n safeModeEnteredAt: timestamp('safe_mode_entered_at'),\n updatedBy: text('updated_by').notNull(),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at')\n .notNull()\n .defaultNow()\n .$onUpdate(() => new Date()),\n },\n (table) => [\n foreignKey({\n name: 'web_theme_selections_active_revision_fk',\n columns: [table.organizationId, table.activeRevisionId],\n foreignColumns: [webThemeRevisions.organizationId, webThemeRevisions.id],\n }).onDelete('restrict'),\n foreignKey({\n name: 'web_theme_selections_previous_revision_fk',\n columns: [table.organizationId, table.previousRevisionId],\n foreignColumns: [webThemeRevisions.organizationId, webThemeRevisions.id],\n }).onDelete('restrict'),\n foreignKey({\n name: 'web_theme_selections_last_compatible_revision_fk',\n columns: [table.organizationId, table.lastKnownCompatibleRevisionId],\n foreignColumns: [webThemeRevisions.organizationId, webThemeRevisions.id],\n }).onDelete('restrict'),\n check(\n 'web_theme_selections_active_previous_distinct_chk',\n sql`${table.activeRevisionId} IS NULL OR ${table.previousRevisionId} IS NULL OR ${table.activeRevisionId} <> ${table.previousRevisionId}`,\n ),\n index('web_theme_selections_active_revision_idx').on(table.activeRevisionId),\n index('web_theme_selections_status_idx').on(table.status),\n ],\n);\n\nconst webThemePluginIdSchema = z\n .string()\n .min(3)\n .max(160)\n .regex(/^[a-z][a-z0-9-]*(\\.[a-z][a-z0-9-]*)+$/);\n\nexport const webThemeHomeTargetSchema: z.ZodType<WebThemeHomeTarget> = z.discriminatedUnion('type', [\n z.object({ type: z.literal('theme-route'), routeId: z.string().min(1).max(160) }),\n z.object({\n type: z.literal('plugin-route'),\n pluginId: webThemePluginIdSchema,\n routeId: z.string().min(1).max(160),\n }),\n z.object({ type: z.literal('designer-page'), pageId: z.string().min(1).max(160) }),\n z.object({ type: z.literal('default') }),\n]);\n\nconst webThemeJsonObjectSchema = z.record(z.string(), z.json());\nexport const webThemeAdapterSelectionSchema = z.object({\n ownerPluginId: webThemePluginIdSchema,\n surfaceId: z.string().min(1).max(160).regex(/^[a-z0-9][a-z0-9._-]*$/),\n source: z.enum(['theme', 'plugin', 'owner']),\n providerPluginId: webThemePluginIdSchema.optional(),\n}).superRefine((selection, ctx) => {\n if (selection.source === 'plugin' && !selection.providerPluginId) {\n ctx.addIssue({\n code: 'custom',\n path: ['providerPluginId'],\n message: 'plugin adapter selections require providerPluginId',\n });\n }\n if (selection.source !== 'plugin' && selection.providerPluginId) {\n ctx.addIssue({\n code: 'custom',\n path: ['providerPluginId'],\n message: 'providerPluginId is only allowed for plugin adapter selections',\n });\n }\n});\n\nexport const webThemeAdapterConfigSchema: z.ZodType<WebThemeAdapterConfig> = z.object({\n selections: z.array(webThemeAdapterSelectionSchema).optional(),\n providers: z.record(webThemePluginIdSchema, webThemeJsonObjectSchema).optional(),\n}).superRefine((config, ctx) => {\n const targets = new Set<string>();\n for (const [index, selection] of (config.selections ?? []).entries()) {\n const key = `${selection.ownerPluginId}:${selection.surfaceId}`;\n if (targets.has(key)) {\n ctx.addIssue({\n code: 'custom',\n path: ['selections', index, 'surfaceId'],\n message: `duplicate adapter selection target: ${key}`,\n });\n }\n targets.add(key);\n }\n});\n\nexport const webThemeRevisionSchema = createInsertSchema(webThemeRevisions, {\n homeTarget: () => webThemeHomeTargetSchema,\n settings: () => webThemeJsonObjectSchema,\n tokenOverrides: () => webThemeJsonObjectSchema,\n adapterConfig: () => webThemeAdapterConfigSchema,\n embedConfig: () => webThemeJsonObjectSchema,\n schemaVersions: () => z.record(z.string(), z.number().int().nonnegative()),\n});\nexport const webThemeRevisionSelectSchema = createSelectSchema(webThemeRevisions);\nexport const webThemeSelectionSchema = createInsertSchema(webThemeSelections);\nexport const webThemeSelectionSelectSchema = createSelectSchema(webThemeSelections);\n\nexport const getWebThemeQuery = z.object({ pluginId: webThemePluginIdSchema });\nexport const setWebThemeEnabledMutation = getWebThemeQuery.extend({ enabled: z.boolean() });\nexport const getWebThemeRevisionQuery = webThemeRevisionSelectSchema.pick({ id: true });\nexport const listWebThemeRevisionsQuery = getWebThemeQuery.merge(paginationSchema);\nexport const saveWebThemeDraftMutation = getWebThemeQuery.extend({\n expectedVersion: z.number().int().positive().optional(),\n homeTarget: webThemeHomeTargetSchema.optional(),\n settings: webThemeJsonObjectSchema.optional(),\n tokenOverrides: webThemeJsonObjectSchema.optional(),\n adapterConfig: webThemeAdapterConfigSchema.optional(),\n embedConfig: webThemeJsonObjectSchema.optional(),\n});\nexport const activateWebThemeMutation = getWebThemeQuery.extend({\n expectedSelectionVersion: z.number().int().positive().optional(),\n});\nexport const activateWebThemeRevisionMutation = getWebThemeRevisionQuery.extend({\n expectedSelectionVersion: z.number().int().positive().optional(),\n});\nexport const publishWebThemeDraftMutation = getWebThemeRevisionQuery.extend({\n expectedDraftVersion: z.number().int().positive(),\n expectedSelectionVersion: z.number().int().positive().optional(),\n});\nexport const rollbackWebThemeRevisionMutation = getWebThemeRevisionQuery.extend({\n expectedSelectionVersion: z.number().int().positive(),\n});\nexport const issueWebThemePreviewMutation = getWebThemeRevisionQuery.extend({\n host: z.string().trim().min(1).max(253),\n pageId: z.string().min(1).max(160).optional(),\n expiresInSeconds: z.number().int().min(30).max(900).optional(),\n});\nexport const recoverWebThemeMutation = z.object({\n expectedSelectionVersion: z.number().int().positive(),\n revisionId: z.string().min(1).optional(),\n});\n\nexport type WebThemeRevision = typeof webThemeRevisions.$inferSelect;\nexport type InsertWebThemeRevision = typeof webThemeRevisions.$inferInsert;\nexport type WebThemeSelection = typeof webThemeSelections.$inferSelect;\nexport type InsertWebThemeSelection = typeof webThemeSelections.$inferInsert;\n","/**\n * Notifications Database Schema\n *\n * Drizzle ORM table definitions for notification management.\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport {\n pgTable,\n text,\n timestamp,\n jsonb,\n boolean,\n integer,\n index,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { user, organization } from './auth';\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * Notification priority levels\n */\nexport type NotificationPriority = 'low' | 'normal' | 'high' | 'urgent';\n\n/**\n * Legacy Notification type (kept for backward compatibility)\n * @deprecated Use NotificationTypeEnum instead\n */\nexport type NotificationType = 'info' | 'success' | 'warning' | 'error';\n\n/**\n * Notification Type Enum - Strong typing for notification categories\n * Following Actor-Action-Object pattern\n */\nexport const NotificationTypeEnum = {\n // System / SaaS\n SYSTEM_ALERT: 'system_alert',\n SYSTEM_WARNING: 'system_warning',\n TASK_ASSIGNED: 'task_assigned',\n TASK_COMPLETED: 'task_completed',\n EXPORT_READY: 'export_ready',\n\n // Collaboration\n COMMENT_ADDED: 'comment_added',\n COMMENT_REPLIED: 'comment_replied',\n MENTIONED: 'mentioned',\n\n // Social (reserved for future)\n POST_LIKED: 'post_liked',\n POST_COMMENTED: 'post_commented',\n USER_FOLLOWED: 'user_followed',\n} as const;\n\nexport type NotificationTypeEnumValue =\n (typeof NotificationTypeEnum)[keyof typeof NotificationTypeEnum];\n\n/**\n * Notification Source - who triggered the notification\n */\nexport type NotificationSource = 'system' | 'plugin' | 'user';\n\n/**\n * Notification Category - determines retention and view strategy\n */\nexport type NotificationCategory = 'system' | 'collaboration' | 'social';\n\n/**\n * Visual Priority - determines UI styling\n */\nexport type VisualPriority = 'high' | 'medium' | 'low';\n\n/**\n * Aggregation Strategy for plugin notifications\n */\nexport type AggregationStrategy = 'none' | 'by_target' | 'by_actor' | 'by_type';\n\n/**\n * Actor information for notification\n */\nexport interface NotificationActor {\n id: string;\n type: 'user' | 'system' | 'plugin';\n name: string;\n avatarUrl?: string;\n}\n\n/**\n * Target object for notification\n */\nexport interface NotificationTarget {\n type: string;\n id: string;\n url?: string | undefined;\n previewImage?: string | undefined;\n}\n\n/**\n * Channel decision trace for debugging\n */\nexport interface ChannelDecisionTrace {\n channel: string;\n included: boolean;\n reason: string;\n}\n\n// ============================================================\n// Notifications Table\n// ============================================================\n\n/**\n * Notifications Table\n *\n * Stores in-app notifications for users.\n * Supports unified notification contract for SaaS + Social scenarios.\n */\nexport const notifications = pgTable(\n 'notifications',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n // FK to user table\n userId: text('user_id')\n .notNull()\n .references(() => user.id, { onDelete: 'cascade' }),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n\n // Actor/Entity for better UI rendering\n actorId: text('actor_id'),\n entityId: text('entity_id'),\n entityType: text('entity_type'),\n\n // Template reference\n templateKey: text('template_key'),\n templateVariables: jsonb('template_variables').$type<Record<string, unknown>>(),\n\n // Content (rendered)\n type: text('type').notNull().$type<NotificationType>(),\n title: text('title').notNull(),\n message: text('message').notNull(),\n link: text('link'),\n\n // Status\n read: boolean('read').notNull().default(false),\n archived: boolean('archived').notNull().default(false),\n\n // Channel tracking\n channelsSent: jsonb('channels_sent').$type<string[]>(),\n channelsFailed: jsonb('channels_failed').$type<string[]>(),\n emailSent: boolean('email_sent').notNull().default(false),\n emailSentAt: timestamp('email_sent_at'),\n\n // Grouping/Bundling support\n groupKey: text('group_key'),\n groupCount: integer('group_count').notNull().default(1),\n\n // Idempotency\n idempotencyKey: text('idempotency_key').unique(),\n\n // Source tracking\n sourcePluginId: text('source_plugin_id'),\n\n // Priority\n priority: text('priority').notNull().default('normal').$type<NotificationPriority>(),\n\n // Source - who triggered the notification (system/plugin/user)\n source: text('source').notNull().default('system').$type<NotificationSource>(),\n\n // Category - determines retention policy and view strategy\n category: text('category').notNull().default('system').$type<NotificationCategory>(),\n\n // Latest Actors - for aggregation display (\"Alice and 4 others...\")\n latestActors: jsonb('latest_actors').$type<NotificationActor[]>().default([]),\n\n // Pinned - for system alerts that need to stay at top\n pinned: boolean('pinned').notNull().default(false),\n\n // Visual Priority - for UI styling\n visualPriority: text('visual_priority').notNull().default('medium').$type<VisualPriority>(),\n\n // Actor info - structured actor data for rendering\n actor: jsonb('actor').$type<NotificationActor>(),\n\n // Target info - what the notification is about\n target: jsonb('target').$type<NotificationTarget>(),\n\n // Aggregation Strategy - how to group notifications\n aggregationStrategy: text('aggregation_strategy')\n .notNull()\n .default('none')\n .$type<AggregationStrategy>(),\n\n // Metadata includes decisionTrace for debugging\n metadata: jsonb('metadata').$type<{\n decisionTrace?: ChannelDecisionTrace[];\n [key: string]: unknown;\n }>(),\n\n // Timestamps\n createdAt: timestamp('created_at').notNull().defaultNow(),\n expiresAt: timestamp('expires_at'),\n },\n (table) => [\n index('idx_notifications_user_read').on(table.userId, table.read),\n index('idx_notifications_template').on(table.templateKey),\n index('idx_notifications_group').on(table.groupKey),\n index('idx_notifications_expires').on(table.expiresAt),\n index('idx_notifications_tenant_user').on(table.organizationId, table.userId),\n index('idx_notifications_category').on(table.category),\n index('idx_notifications_source').on(table.source),\n index('idx_notifications_pinned').on(table.pinned),\n index('idx_notifications_cleanup').on(table.category, table.read, table.createdAt),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const notificationSchema = createInsertSchema(notifications);\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type Notification = typeof notifications.$inferSelect;\nexport type InsertNotification = typeof notifications.$inferInsert;\n\n/**\n * Grouped notification response for API\n */\nexport interface GroupedNotification {\n id: string;\n type: NotificationType | NotificationTypeEnumValue;\n actor: NotificationActor;\n title: string;\n body?: string;\n target: NotificationTarget;\n groupInfo?: {\n key: string;\n count: number;\n latestActors: NotificationActor[];\n };\n read: boolean;\n pinned: boolean;\n visualPriority: VisualPriority;\n createdAt: Date;\n}\n","/**\n * Notification Templates Database Schema\n *\n * Drizzle ORM table definitions for notification templates.\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport {\n pgTable,\n text,\n timestamp,\n jsonb,\n boolean,\n integer,\n index,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport type { NotificationPriority } from './notifications';\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * i18n text structure\n */\nexport type I18nText = Record<string, string>;\n\n/**\n * Template category\n */\nexport type TemplateCategory = 'system' | 'plugin' | 'custom';\n\n// ============================================================\n// Notification Templates Table\n// ============================================================\n\n/**\n * Notification Templates Table\n *\n * Stores configurable notification templates with i18n support.\n */\nexport const notificationTemplates = pgTable(\n 'notification_templates',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n // Unique key (e.g., 'comment.new', 'order.shipped')\n key: text('key').notNull().unique(),\n\n // Display name\n name: text('name').notNull(),\n description: text('description'),\n\n // Category\n category: text('category').notNull().$type<TemplateCategory>(),\n\n // i18n content\n title: jsonb('title').notNull().$type<I18nText>(),\n message: jsonb('message').notNull().$type<I18nText>(),\n\n // Variables that can be interpolated\n variables: jsonb('variables').$type<string[]>(),\n\n // Default channels for this template\n defaultChannels: jsonb('default_channels')\n .notNull()\n .default(['in-app'])\n .$type<string[]>(),\n\n // Priority\n priority: text('priority').notNull().default('normal').$type<NotificationPriority>(),\n\n // Plugin reference (if registered by plugin)\n pluginId: text('plugin_id'),\n\n // Template evolution\n deprecated: boolean('deprecated').notNull().default(false),\n version: integer('version').notNull().default(1),\n\n // Timestamps\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at').notNull().defaultNow(),\n },\n (table) => [\n index('idx_templates_plugin').on(table.pluginId),\n index('idx_templates_category').on(table.category),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const notificationTemplateSchema = createInsertSchema(notificationTemplates);\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type NotificationTemplate = typeof notificationTemplates.$inferSelect;\nexport type InsertNotificationTemplate = typeof notificationTemplates.$inferInsert;\n","/**\n * Notification Channels Database Schema\n *\n * Drizzle ORM table definitions for notification channel management.\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport {\n pgTable,\n text,\n timestamp,\n jsonb,\n boolean,\n index,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport type { I18nText } from './notification-templates';\n\n// ============================================================\n// Notification Channels Table\n// ============================================================\n\n/**\n * Notification Channels Table\n *\n * Stores available notification channels (plugin-registered).\n */\nexport const notificationChannels = pgTable(\n 'notification_channels',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n // Unique key (namespaced)\n // Format: 'in-app' (Core) or 'plugin:{pluginId}:{channel}'\n key: text('key').notNull().unique(),\n\n // Display name (i18n)\n name: jsonb('name').notNull().$type<I18nText>(),\n\n // Description (i18n)\n description: jsonb('description').$type<I18nText>(),\n\n // Icon name\n icon: text('icon'),\n\n // Plugin reference\n pluginId: text('plugin_id').notNull(),\n\n // Is this channel currently enabled\n enabled: boolean('enabled').notNull().default(true),\n\n // User configuration schema (Zod schema as JSON)\n configSchema: jsonb('config_schema'),\n\n // Timestamps\n createdAt: timestamp('created_at').notNull().defaultNow(),\n },\n (table) => [\n index('idx_channels_plugin').on(table.pluginId),\n index('idx_channels_enabled').on(table.enabled),\n ]\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const notificationChannelSchema = createInsertSchema(notificationChannels);\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type NotificationChannel = typeof notificationChannels.$inferSelect;\nexport type InsertNotificationChannel = typeof notificationChannels.$inferInsert;\n","/**\n * Notification Preferences Database Schema\n *\n * Drizzle ORM table definitions for user notification preferences.\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport {\n pgTable,\n text,\n timestamp,\n jsonb,\n uniqueIndex,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { user, organization } from './auth';\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * Quiet hours configuration\n */\nexport interface QuietHoursConfig {\n enabled: boolean;\n start: string; // '22:00'\n end: string; // '08:00'\n timezone: string;\n}\n\n/**\n * Email frequency options\n */\nexport type EmailFrequency = 'instant' | 'hourly' | 'daily';\n\n// ============================================================\n// Notification Preferences Table\n// ============================================================\n\n/**\n * Notification Preferences Table\n *\n * Stores user notification preferences per tenant.\n */\nexport const notificationPreferences = pgTable(\n 'notification_preferences',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n // FK to user table\n userId: text('user_id')\n .notNull()\n .references(() => user.id, { onDelete: 'cascade' }),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n\n // Enabled channels (global)\n enabledChannels: jsonb('enabled_channels')\n .notNull()\n .default(['in-app'])\n .$type<string[]>(),\n\n // Per-template channel overrides\n // e.g., { 'order.urgent': ['in-app', 'email', 'sms'] }\n templateOverrides: jsonb('template_overrides').$type<\n Record<string, string[]>\n >(),\n\n // Quiet hours (do not disturb)\n quietHours: jsonb('quiet_hours').$type<QuietHoursConfig>(),\n\n // Email digest frequency\n emailFrequency: text('email_frequency')\n .notNull()\n .default('instant')\n .$type<EmailFrequency>(),\n\n // Timestamps\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at').notNull().defaultNow(),\n },\n (table) => [\n uniqueIndex('idx_preferences_user_tenant').on(\n table.userId,\n table.organizationId\n ),\n ]\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const notificationPreferenceSchema = createInsertSchema(notificationPreferences);\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type NotificationPreference = typeof notificationPreferences.$inferSelect;\nexport type InsertNotificationPreference = typeof notificationPreferences.$inferInsert;\n","/**\n * Audit Logs Database Schema\n *\n * Drizzle ORM table definitions for audit logging.\n * These are the source of truth - Zod schemas are generated from these.\n *\n * IMPORTANT: This table is APPEND-ONLY. No UPDATE or DELETE operations allowed.\n */\nimport { pgTable, text, timestamp, jsonb, index } from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { organization } from './auth';\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * Actor Type - who performed the action\n */\nexport type ActorType = 'user' | 'plugin' | 'system';\n\n/**\n * Audit Result - outcome of the action\n */\nexport type AuditResult = 'allow' | 'deny' | 'error';\n\n// ============================================================\n// Audit Logs Table\n// ============================================================\n\n/**\n * Audit Logs Table\n *\n * Records permission checks, sensitive operations.\n *\n * IMPORTANT: This table is APPEND-ONLY. No UPDATE or DELETE operations allowed.\n * Use archive() method to move old records to audit_logs_archive.\n */\nexport const auditLogs = pgTable(\n 'audit_logs',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n // Actor\n actorType: text('actor_type').notNull().$type<ActorType>(),\n actorId: text('actor_id').notNull(),\n\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n\n // Action\n action: text('action').notNull(),\n resource: text('resource'),\n\n // Result\n result: text('result').notNull().$type<AuditResult>(),\n reason: text('reason'),\n\n // Metadata\n metadata: jsonb('metadata'),\n\n // Audit enhancement fields\n actorIp: text('actor_ip'),\n userAgent: text('user_agent'),\n traceId: text('trace_id'),\n\n createdAt: timestamp('created_at').notNull().defaultNow(),\n },\n (table) => [\n index('audit_logs_organization_idx').on(table.organizationId),\n index('audit_logs_actor_idx').on(table.actorType, table.actorId),\n index('audit_logs_action_idx').on(table.action),\n index('audit_logs_created_at_idx').on(table.createdAt),\n index('audit_logs_trace_idx').on(table.traceId),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const auditLogSchema = createInsertSchema(auditLogs);\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type AuditLogEntry = typeof auditLogs.$inferSelect;\nexport type InsertAuditLogEntry = typeof auditLogs.$inferInsert;\n","/**\n * Audit Events Database Schema\n *\n * Drizzle ORM table definitions for generic entity change tracking.\n * These are the source of truth - Zod schemas are generated from these.\n *\n * IMPORTANT: This table is APPEND-ONLY. No UPDATE or DELETE operations allowed.\n */\nimport { pgTable, text, timestamp, jsonb, index } from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { organization } from './auth';\n\n// ============================================================\n// Types\n// ============================================================\n\nexport type AuditEventActorType = 'user' | 'system' | 'plugin' | 'api-token';\n\nexport interface AuditChanges {\n old?: unknown;\n new?: unknown;\n}\n\n/**\n * Audit Event Input Interface\n *\n * Used by AuditService.log() - actor context is auto-populated from AsyncLocalStorage\n */\nexport interface AuditEventInput {\n entityType: string;\n entityId?: string | undefined;\n organizationId?: string | undefined;\n action: string;\n changes?: AuditChanges;\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Audit Query Filters\n */\nexport interface AuditQueryFilters {\n entityType?: string;\n entityId?: string;\n organizationId?: string;\n actorId?: string;\n action?: string;\n startTime?: Date;\n endTime?: Date;\n limit?: number;\n offset?: number;\n}\n\n// ============================================================\n// Audit Events Table\n// ============================================================\n\n/**\n * Audit Events Table - Generic Entity Change Tracking\n *\n * This is a platform-level audit table that tracks changes to any entity.\n * Used by Settings, Users, Roles, Feature Flags, and other modules.\n *\n * Different from audit_logs which is specifically for permission checks.\n */\nexport const auditEvents = pgTable(\n 'audit_events',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n // Entity identification\n entityType: text('entity_type').notNull(), // 'setting', 'user', 'role', 'feature_flag', etc.\n entityId: text('entity_id'), // Entity ID (can be NULL for batch operations)\n\n // FK to organization table (nullable for global operations)\n organizationId: text('organization_id')\n .references(() => organization.id, { onDelete: 'cascade' }),\n\n // Action\n action: text('action').notNull(), // 'create', 'update', 'delete', 'login', 'logout', etc.\n\n // Changes (flexible structure)\n changes: jsonb('changes').$type<AuditChanges>(), // { old: {...}, new: {...} } or custom structure\n metadata: jsonb('metadata').$type<Record<string, unknown>>(), // Extra context\n\n // Actor\n actorId: text('actor_id').notNull(),\n actorType: text('actor_type').notNull().$type<AuditEventActorType>().default('user'),\n actorIp: text('actor_ip'),\n userAgent: text('user_agent'),\n\n // Correlation & Tracing\n requestId: text('request_id'), // Request tracking ID\n sessionId: text('session_id'),\n traceId: text('trace_id'), // Distributed trace ID\n\n // Timestamp\n createdAt: timestamp('created_at').notNull().defaultNow(),\n },\n (table) => [\n // Index for entity queries\n index('audit_events_entity_idx').on(table.entityType, table.entityId),\n // Index for tenant queries\n index('audit_events_organization_idx').on(table.organizationId),\n // Index for actor queries\n index('audit_events_actor_idx').on(table.actorId),\n // Index for time-based queries\n index('audit_events_time_idx').on(table.createdAt),\n // Index for action queries\n index('audit_events_action_idx').on(table.entityType, table.action),\n // Index for trace queries\n index('audit_events_trace_idx').on(table.traceId),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const auditEventSchema = createInsertSchema(auditEvents);\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type AuditEvent = typeof auditEvents.$inferSelect;\nexport type InsertAuditEvent = typeof auditEvents.$inferInsert;\n","/**\n * Audit Archive Database Schema\n *\n * Drizzle ORM table definitions for archived audit records.\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport { pgTable, text, timestamp, jsonb, index } from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { organization } from './auth';\nimport type { AuditChanges } from './audit-events';\n\n// ============================================================\n// Types\n// ============================================================\n\nexport type ArchiveActorType = 'user' | 'plugin' | 'system';\n\n// ============================================================\n// Audit Events Archive Table\n// ============================================================\n\n/**\n * Audit Events Archive Table\n *\n * Same structure as audit_events, used for cold storage of old records.\n * Records are moved here by the archive() method after retention period.\n */\nexport const auditEventsArchive = pgTable(\n 'audit_events_archive',\n {\n id: text('id').primaryKey(),\n\n // Entity identification\n entityType: text('entity_type').notNull(),\n entityId: text('entity_id'),\n\n // FK to organization table (nullable for global operations)\n organizationId: text('organization_id')\n .references(() => organization.id, { onDelete: 'set null' }),\n\n // Action\n action: text('action').notNull(),\n\n // Changes\n changes: jsonb('changes').$type<AuditChanges>(),\n metadata: jsonb('metadata').$type<Record<string, unknown>>(),\n\n // Actor\n actorId: text('actor_id').notNull(),\n actorType: text('actor_type').notNull().$type<ArchiveActorType>().default('user'),\n actorIp: text('actor_ip'),\n userAgent: text('user_agent'),\n\n // Correlation & Tracing\n requestId: text('request_id'),\n sessionId: text('session_id'),\n traceId: text('trace_id'),\n\n // Timestamps\n createdAt: timestamp('created_at').notNull(),\n archivedAt: timestamp('archived_at').notNull().defaultNow(),\n },\n (table) => [\n index('audit_events_archive_entity_idx').on(table.entityType, table.entityId),\n index('audit_events_archive_organization_idx').on(table.organizationId),\n index('audit_events_archive_time_idx').on(table.createdAt),\n ]\n);\n\n// ============================================================\n// Audit Logs Archive Table\n// ============================================================\n\n/**\n * Audit Logs Archive Table\n *\n * Same structure as audit_logs, used for cold storage of old records.\n */\nexport const auditLogsArchive = pgTable(\n 'audit_logs_archive',\n {\n id: text('id').primaryKey(),\n\n // Actor\n actorType: text('actor_type').notNull().$type<ArchiveActorType>(),\n actorId: text('actor_id').notNull(),\n\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n\n // Action\n action: text('action').notNull(),\n resource: text('resource'),\n\n // Result\n result: text('result').notNull().$type<'allow' | 'deny' | 'error'>(),\n reason: text('reason'),\n\n // Metadata\n metadata: jsonb('metadata'),\n\n // Audit enhancement fields\n actorIp: text('actor_ip'),\n userAgent: text('user_agent'),\n traceId: text('trace_id'),\n\n // Timestamps\n createdAt: timestamp('created_at').notNull(),\n archivedAt: timestamp('archived_at').notNull().defaultNow(),\n },\n (table) => [\n index('audit_logs_archive_organization_idx').on(table.organizationId),\n index('audit_logs_archive_actor_idx').on(table.actorType, table.actorId),\n index('audit_logs_archive_time_idx').on(table.createdAt),\n ]\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const auditEventsArchiveSchema = createInsertSchema(auditEventsArchive);\nexport const auditLogsArchiveSchema = createInsertSchema(auditLogsArchive);\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type ArchivedAuditEvent = typeof auditEventsArchive.$inferSelect;\nexport type ArchivedAuditLog = typeof auditLogsArchive.$inferSelect;\n","/**\n * Entity Ownerships Database Schema\n *\n * Drizzle ORM table definitions for LBAC (Label-Based Access Control).\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport {\n pgTable,\n text,\n timestamp,\n index,\n uniqueIndex,\n jsonb,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { organization } from './auth';\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * Scope Types for ownership\n */\nexport const ScopeType = {\n USER: 'user',\n TEAM: 'team',\n ROLE: 'role',\n SPACE: 'space',\n ORG: 'org',\n} as const;\n\nexport type ScopeTypeValue = (typeof ScopeType)[keyof typeof ScopeType];\n\n/**\n * Access Levels\n */\nexport const AccessLevel = {\n READ: 'read',\n WRITE: 'write',\n} as const;\n\nexport type AccessLevelValue = (typeof AccessLevel)[keyof typeof AccessLevel];\n\n// ============================================================\n// Entity Ownerships Table\n// ============================================================\n\n/**\n * Entity Ownerships Table (Write Model - SoT)\n *\n * Records WHO can access WHAT at WHAT level.\n * This is the ONLY authoritative source for permission grants.\n */\nexport const entityOwnerships = pgTable(\n 'entity_ownerships',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n // Target Entity\n entityType: text('entity_type').notNull(), // 'article', 'document', etc.\n entityId: text('entity_id').notNull(),\n\n // Scope (who has access)\n scopeType: text('scope_type').notNull(), // 'user' | 'team' | 'role' | 'space' | 'org'\n scopeId: text('scope_id').notNull(),\n\n // Access Level\n level: text('level').notNull().default('read'), // 'read' | 'write'\n\n // Inheritance Tracking (for rebuild)\n inheritedFromType: text('inherited_from_type'), // 'team' | 'space' | null\n inheritedFromId: text('inherited_from_id'), // Source scope ID\n\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n\n // Expiration (optional, for time-limited access)\n expireAt: timestamp('expire_at'),\n\n // Metadata\n createdAt: timestamp('created_at').defaultNow().notNull(),\n updatedAt: timestamp('updated_at').defaultNow().notNull(),\n createdBy: text('created_by'), // Actor who granted this\n },\n (table) => [\n // Unique constraint: one grant per entity-scope combination\n uniqueIndex('ownership_unique_idx').on(\n table.entityType,\n table.entityId,\n table.scopeType,\n table.scopeId,\n ),\n // Query by entity\n index('ownership_entity_idx').on(table.entityType, table.entityId),\n // Query by scope (who has access to what)\n index('ownership_scope_idx').on(table.scopeType, table.scopeId),\n // Query inherited ownerships (for rebuild on membership change)\n index('ownership_inherited_idx').on(table.inheritedFromType, table.inheritedFromId),\n // Tenant isolation\n index('ownership_org_idx').on(table.organizationId),\n // Expiration cleanup\n index('ownership_expire_idx').on(table.expireAt),\n ],\n);\n\n// ============================================================\n// Ownership Audit Log Table\n// ============================================================\n\n/**\n * Ownership Audit Log - For compliance and debugging\n *\n * Records all changes to ownerships for audit trail.\n */\nexport const ownershipAuditLog = pgTable(\n 'ownership_audit_log',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n // Reference to ownership (may be deleted)\n ownershipId: text('ownership_id').notNull(),\n entityType: text('entity_type').notNull(),\n entityId: text('entity_id').notNull(),\n scopeType: text('scope_type').notNull(),\n scopeId: text('scope_id').notNull(),\n\n // Action\n action: text('action').notNull(), // 'grant' | 'revoke' | 'inherit_expand' | 'inherit_collapse' | 'expire'\n\n // State snapshot\n beforeState: jsonb('before_state'),\n afterState: jsonb('after_state'),\n\n // Actor\n actorId: text('actor_id').notNull(),\n actorType: text('actor_type').notNull(), // 'user' | 'system' | 'plugin'\n reason: text('reason'),\n\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n\n // Timestamp\n timestamp: timestamp('timestamp').defaultNow().notNull(),\n },\n (table) => [\n index('audit_ownership_idx').on(table.ownershipId),\n index('audit_entity_idx').on(table.entityType, table.entityId),\n index('audit_actor_idx').on(table.actorId),\n index('audit_org_idx').on(table.organizationId),\n index('audit_timestamp_idx').on(table.timestamp),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const entityOwnershipSchema = createInsertSchema(entityOwnerships);\nexport const ownershipAuditLogSchema = createInsertSchema(ownershipAuditLog);\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type EntityOwnership = typeof entityOwnerships.$inferSelect;\nexport type EntityOwnershipInsert = typeof entityOwnerships.$inferInsert;\nexport type OwnershipAuditLog = typeof ownershipAuditLog.$inferSelect;\n","/**\n * Billing Database Schema\n *\n * Drizzle ORM table definitions for subscription and billing management.\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport {\n pgTable,\n text,\n timestamp,\n jsonb,\n uuid,\n integer,\n index,\n uniqueIndex,\n} from 'drizzle-orm/pg-core';\nimport { sql } from 'drizzle-orm';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { organization } from './auth';\nimport { user } from './auth';\n\n// ============================================================\n// Types\n// ============================================================\n\nexport type PlanInterval = 'month' | 'year' | 'one_time';\nexport type PlanItemType = 'boolean' | 'metered';\nexport type ResetMode = 'period' | 'never';\nexport type ResetStrategy = 'hard' | 'soft' | 'capped';\nexport type QuotaScope = 'tenant' | 'user';\nexport type QuotaSourceType = 'membership' | 'shop_order' | 'plugin' | 'admin_grant';\nexport type TransactionStatus = 'PENDING' | 'PAID' | 'FAILED' | 'REFUNDED';\nexport type TransactionSourceType = 'membership' | 'shop_order' | 'plugin' | 'wallet_topup';\nexport type BillingEventOutboxStatus = 'pending' | 'processing' | 'completed';\nexport type SubscriptionStatus = 'trialing' | 'active' | 'past_due' | 'canceled' | 'expired';\nexport type CapabilityType = 'boolean' | 'metered';\nexport type CapabilitySource = 'core' | 'plugin';\nexport type CapabilityStatus = 'pending' | 'approved' | 'rejected';\nexport type OveragePolicy = 'deny' | 'charge' | 'throttle' | 'downgrade';\n\n// ============================================================\n// Capabilities Table\n// ============================================================\n\nexport const capabilities = pgTable(\n 'capabilities',\n {\n subject: text('subject').primaryKey(),\n type: text('type').notNull().$type<CapabilityType>(),\n unit: text('unit'),\n description: text('description'),\n source: text('source').notNull().$type<CapabilitySource>(),\n pluginId: text('plugin_id'),\n status: text('status').notNull().$type<CapabilityStatus>().default('pending'),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n },\n (table) => [\n index('idx_capabilities_source_status').on(table.source, table.status),\n index('idx_capabilities_plugin_id').on(table.pluginId),\n ],\n);\n\nexport type Capability = typeof capabilities.$inferSelect;\n\n// ============================================================\n// Plans Table\n// ============================================================\n\nexport const plans = pgTable('plans', {\n id: text('id').primaryKey().$defaultFn(() => crypto.randomUUID()),\n name: text('name').notNull(),\n description: text('description'),\n interval: text('interval').notNull().$type<PlanInterval>(),\n intervalCount: integer('interval_count').notNull().default(1),\n currency: text('currency').notNull().default('usd'),\n priceCents: integer('price_cents').notNull(),\n isActive: integer('is_active').notNull().default(1),\n metadata: jsonb('metadata').$type<Record<string, unknown>>(),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at').notNull().defaultNow(),\n});\n\nexport type Plan = typeof plans.$inferSelect;\n\n// ============================================================\n// Plan Items Table\n// ============================================================\n\nexport const planItems = pgTable(\n 'plan_items',\n {\n id: uuid('id').primaryKey().defaultRandom(),\n planId: text('plan_id')\n .notNull()\n .references(() => plans.id, { onDelete: 'cascade' }),\n subject: text('subject').notNull(),\n procedurePath: text('procedure_path'),\n groupKey: text('group_key'),\n type: text('type').notNull().$type<PlanItemType>(),\n amount: integer('amount'),\n resetMode: text('reset_mode').notNull().$type<ResetMode>(),\n priority: integer('priority').notNull().default(0),\n overagePolicy: text('overage_policy').$type<OveragePolicy>().default('deny'),\n overagePriceCents: integer('overage_price_cents'),\n resetStrategy: text('reset_strategy').$type<ResetStrategy>().default('hard'),\n resetCap: integer('reset_cap'),\n quotaScope: text('quota_scope').$type<QuotaScope>().notNull().default('tenant'),\n metadata: jsonb('metadata').$type<Record<string, unknown>>(),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at').notNull().defaultNow(),\n },\n (table) => [\n index('idx_plan_items_plan_id').on(table.planId),\n index('idx_plan_items_subject').on(table.subject),\n index('idx_plan_items_procedure_path').on(table.procedurePath),\n uniqueIndex('uq_plan_items_plan_procedure_path')\n .on(table.planId, table.procedurePath)\n .where(sql`${table.procedurePath} IS NOT NULL`),\n ],\n);\n\nexport type PlanItem = typeof planItems.$inferSelect;\n\n// ============================================================\n// User Quotas Table\n// ============================================================\n\nexport const userQuotas = pgTable(\n 'user_quotas',\n {\n id: uuid('id').primaryKey().defaultRandom(),\n userId: text('user_id')\n .notNull()\n .references(() => user.id, { onDelete: 'cascade' }),\n organizationId: text('organization_id')\n .references(() => organization.id, { onDelete: 'cascade' }),\n subject: text('subject').notNull(),\n balance: integer('balance').notNull(),\n priority: integer('priority').notNull().default(0),\n expiresAt: timestamp('expires_at'),\n sourceType: text('source_type').notNull().$type<QuotaSourceType>(),\n sourceId: text('source_id').notNull(),\n metadata: jsonb('metadata').$type<Record<string, unknown>>(),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at').notNull().defaultNow(),\n },\n (table) => [\n index('idx_user_quotas_user_feature').on(table.userId, table.subject),\n index('idx_user_quotas_waterfall').on(\n table.userId,\n table.subject,\n table.balance,\n table.priority,\n table.expiresAt,\n ),\n uniqueIndex('uq_user_quotas_source').on(\n table.organizationId,\n table.userId,\n table.subject,\n table.sourceType,\n table.sourceId,\n ),\n uniqueIndex('uq_user_quotas_legacy_source')\n .on(table.userId, table.subject, table.sourceType, table.sourceId)\n .where(sql`${table.organizationId} IS NULL`),\n ],\n);\n\nexport type UserQuota = typeof userQuotas.$inferSelect;\n\n// ============================================================\n// Wallets Table\n// ============================================================\n\nexport const wallets = pgTable('wallets', {\n userId: text('user_id')\n .primaryKey()\n .references(() => user.id, { onDelete: 'cascade' }),\n balanceCents: integer('balance_cents').notNull().default(0),\n currency: text('currency').notNull().default('usd'),\n updatedAt: timestamp('updated_at').notNull().defaultNow(),\n});\n\nexport type Wallet = typeof wallets.$inferSelect;\n\n// ============================================================\n// Transactions Table\n// ============================================================\n\nexport const transactions = pgTable(\n 'transactions',\n {\n id: uuid('id').primaryKey().defaultRandom(),\n userId: text('user_id')\n .notNull()\n .references(() => user.id, { onDelete: 'cascade' }),\n amountCents: integer('amount_cents').notNull(),\n currency: text('currency').notNull(),\n sourceType: text('source_type').notNull().$type<TransactionSourceType>(),\n sourceId: text('source_id').notNull(),\n status: text('status').notNull().$type<TransactionStatus>().default('PENDING'),\n gateway: text('gateway'),\n externalId: text('external_id'),\n baseCurrency: text('base_currency'),\n baseAmountCents: integer('base_amount_cents'),\n settlementCurrency: text('settlement_currency'),\n settlementAmountCents: integer('settlement_amount_cents'),\n exchangeRate: text('exchange_rate'),\n exchangeRateAt: timestamp('exchange_rate_at'),\n metadata: jsonb('metadata').$type<Record<string, unknown>>(),\n paidAt: timestamp('paid_at'),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at').notNull().defaultNow(),\n },\n (table) => [\n index('idx_transactions_user_source').on(table.userId, table.sourceType, table.sourceId),\n uniqueIndex('uq_transactions_external_id').on(table.externalId),\n index('idx_transactions_status').on(table.status),\n ],\n);\n\nexport type Transaction = typeof transactions.$inferSelect;\n\n// ============================================================\n// Billing Event Outbox\n// ============================================================\n\n/**\n * Durable hand-off between billing state transitions and the in-process\n * EventBus. Delivery is at-least-once; dedupeKey/eventId let consumers apply\n * their own durable idempotency without rerunning billing state changes.\n */\nexport const billingEventOutbox = pgTable(\n 'billing_event_outbox',\n {\n id: uuid('id').primaryKey().defaultRandom(),\n dedupeKey: text('dedupe_key').notNull(),\n transactionId: uuid('transaction_id')\n .notNull()\n .references(() => transactions.id, { onDelete: 'cascade' }),\n eventName: text('event_name').notNull(),\n payload: jsonb('payload').notNull().$type<Record<string, unknown>>(),\n status: text('status')\n .notNull()\n .$type<BillingEventOutboxStatus>()\n .default('pending'),\n attempts: integer('attempts').notNull().default(0),\n availableAt: timestamp('available_at', { withTimezone: true }).notNull().defaultNow(),\n claimId: uuid('claim_id'),\n leaseExpiresAt: timestamp('lease_expires_at', { withTimezone: true }),\n lastError: text('last_error'),\n completedAt: timestamp('completed_at', { withTimezone: true }),\n createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),\n updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(),\n },\n (table) => [\n uniqueIndex('billing_event_outbox_dedupe_uidx').on(table.dedupeKey),\n index('billing_event_outbox_available_idx').on(table.status, table.availableAt),\n index('billing_event_outbox_transaction_idx').on(table.transactionId),\n ],\n);\n\nexport type BillingEventOutbox = typeof billingEventOutbox.$inferSelect;\n\n// ============================================================\n// Usage Records Table\n// ============================================================\n\nexport const usageRecords = pgTable(\n 'usage_records',\n {\n id: uuid('id').primaryKey().defaultRandom(),\n userId: text('user_id')\n .notNull()\n .references(() => user.id, { onDelete: 'cascade' }),\n subject: text('subject').notNull(),\n amount: integer('amount').notNull(),\n quotaIds: jsonb('quota_ids').$type<string[]>(),\n overageChargedCents: integer('overage_charged_cents'),\n occurredAt: timestamp('occurred_at').notNull().defaultNow(),\n metadata: jsonb('metadata').$type<Record<string, unknown>>(),\n },\n (table) => [\n index('idx_usage_records_user_feature').on(table.userId, table.subject),\n index('idx_usage_records_occurred_at').on(table.occurredAt),\n ],\n);\n\nexport type UsageRecord = typeof usageRecords.$inferSelect;\n\n// ============================================================\n// Plan Subscriptions Table\n// ============================================================\n\nexport const planSubscriptions = pgTable(\n 'plan_subscriptions',\n {\n id: uuid('id').primaryKey().defaultRandom(),\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n planId: text('plan_id')\n .notNull()\n .references(() => plans.id, { onDelete: 'restrict' }),\n status: text('status').notNull().$type<SubscriptionStatus>(),\n version: integer('version').notNull().default(1),\n currentPeriodStart: timestamp('current_period_start').notNull(),\n currentPeriodEnd: timestamp('current_period_end').notNull(),\n billingCycleAnchor: integer('billing_cycle_anchor'),\n trialStart: timestamp('trial_start'),\n trialEnd: timestamp('trial_end'),\n renewalCount: integer('renewal_count').notNull().default(0),\n lastRenewalAt: timestamp('last_renewal_at'),\n gateway: text('gateway'),\n externalSubscriptionId: text('external_subscription_id'),\n initialTransactionId: uuid('initial_transaction_id')\n .references(() => transactions.id, { onDelete: 'set null' }),\n latestTransactionId: uuid('latest_transaction_id')\n .references(() => transactions.id, { onDelete: 'set null' }),\n canceledAt: timestamp('canceled_at'),\n cancelReason: text('cancel_reason'),\n cancelAtPeriodEnd: integer('cancel_at_period_end').default(0),\n scheduledPlanId: text('scheduled_plan_id')\n .references(() => plans.id, { onDelete: 'set null' }),\n scheduledChangeAt: timestamp('scheduled_change_at'),\n metadata: jsonb('metadata').$type<Record<string, unknown>>(),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at').notNull().defaultNow(),\n },\n (table) => [\n index('idx_subscriptions_tenant').on(table.organizationId),\n index('idx_subscriptions_status').on(table.status),\n index('idx_subscriptions_period_end').on(table.currentPeriodEnd),\n uniqueIndex('uq_subscriptions_external_id').on(table.externalSubscriptionId),\n uniqueIndex('uq_subscriptions_tenant_plan_active')\n .on(table.organizationId, table.planId)\n .where(sql`status IN ('active', 'trialing', 'past_due')`),\n ],\n);\n\nexport type PlanSubscription = typeof planSubscriptions.$inferSelect;\n\n// ============================================================\n// Tenant Quotas Table\n// ============================================================\n\nexport const tenantQuotas = pgTable(\n 'tenant_quotas',\n {\n id: uuid('id').primaryKey().defaultRandom(),\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n subject: text('subject').notNull(),\n balance: integer('balance').notNull(),\n priority: integer('priority').notNull().default(100),\n expiresAt: timestamp('expires_at'),\n sourceType: text('source_type').notNull().$type<QuotaSourceType>(),\n sourceId: text('source_id').notNull(),\n metadata: jsonb('metadata').$type<Record<string, unknown>>(),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at').notNull().defaultNow(),\n },\n (table) => [\n index('idx_tenant_quotas_tenant_feature').on(table.organizationId, table.subject),\n index('idx_tenant_quotas_waterfall').on(\n table.organizationId,\n table.subject,\n table.balance,\n table.priority,\n table.expiresAt,\n ),\n uniqueIndex('uq_tenant_quotas_source').on(\n table.organizationId,\n table.subject,\n table.sourceType,\n table.sourceId,\n ),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const capabilitySchema = createInsertSchema(capabilities);\nexport const planSchema = createInsertSchema(plans);\nexport const planItemSchema = createInsertSchema(planItems);\nexport const userQuotaSchema = createInsertSchema(userQuotas);\nexport const walletSchema = createInsertSchema(wallets);\nexport const transactionSchema = createInsertSchema(transactions);\nexport const billingEventOutboxSchema = createInsertSchema(billingEventOutbox);\nexport const usageRecordSchema = createInsertSchema(usageRecords);\nexport const planSubscriptionSchema = createInsertSchema(planSubscriptions);\nexport const tenantQuotaSchema = createInsertSchema(tenantQuotas);\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type TenantQuota = typeof tenantQuotas.$inferSelect;\nexport type InsertPlan = typeof plans.$inferInsert;\nexport type InsertPlanItem = typeof planItems.$inferInsert;\nexport type InsertCapability = typeof capabilities.$inferInsert;\nexport type InsertUserQuota = typeof userQuotas.$inferInsert;\nexport type InsertTransaction = typeof transactions.$inferInsert;\nexport type InsertBillingEventOutbox = typeof billingEventOutbox.$inferInsert;\nexport type InsertUsageRecord = typeof usageRecords.$inferInsert;\nexport type InsertPlanSubscription = typeof planSubscriptions.$inferInsert;\nexport type InsertTenantQuota = typeof tenantQuotas.$inferInsert;\n","/**\n * Currency Database Schema\n *\n * Drizzle ORM table definitions for multi-currency support.\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport {\n pgTable,\n text,\n timestamp,\n jsonb,\n uuid,\n integer,\n index,\n uniqueIndex,\n numeric,\n} from 'drizzle-orm/pg-core';\nimport { sql } from 'drizzle-orm';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { organization } from './auth';\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * I18n text for currency name\n */\nexport type CurrencyNameI18n = Record<string, string>;\n\n/**\n * Exchange rate source type\n */\nexport type ExchangeRateSource = 'manual' | `api:${string}`;\n\n// ============================================================\n// Currencies Table\n// ============================================================\n\n/**\n * Currencies Table\n *\n * Stores currency configurations per organization.\n * Each organization can have multiple currencies with one base currency.\n */\nexport const currencies = pgTable(\n 'currencies',\n {\n id: uuid('id').primaryKey().defaultRandom(),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n code: text('code').notNull(), // ISO 4217 uppercase (USD, CNY, EUR)\n nameI18n: jsonb('name_i18n').notNull().$type<CurrencyNameI18n>(),\n symbol: text('symbol').notNull(), // '$', '¥', '€'\n decimalDigits: integer('decimal_digits').notNull().default(2),\n isEnabled: integer('is_enabled').notNull().default(1),\n isBase: integer('is_base').notNull().default(0),\n currentRate: numeric('current_rate', { precision: 18, scale: 8 }),\n createdBy: text('created_by'),\n updatedBy: text('updated_by'),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at').notNull().defaultNow(),\n },\n (table) => [\n uniqueIndex('uq_currencies_org_code').on(table.organizationId, table.code),\n uniqueIndex('uq_currencies_org_base')\n .on(table.organizationId)\n .where(sql`is_base = 1`),\n index('idx_currencies_org').on(table.organizationId),\n ],\n);\n\nexport type Currency = typeof currencies.$inferSelect;\n\n// ============================================================\n// Exchange Rates Table\n// ============================================================\n\n/**\n * Exchange Rates Table\n *\n * Stores exchange rates between currencies for each organization.\n * Supports historical rates with effective_at timestamp.\n */\nexport const exchangeRates = pgTable(\n 'exchange_rates',\n {\n id: uuid('id').primaryKey().defaultRandom(),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n baseCurrency: text('base_currency').notNull(),\n targetCurrency: text('target_currency').notNull(),\n rate: numeric('rate', { precision: 18, scale: 8 }).notNull(),\n source: text('source').notNull().$type<ExchangeRateSource>(),\n effectiveAt: timestamp('effective_at').notNull(),\n expiresAt: timestamp('expires_at'),\n createdBy: text('created_by'),\n updatedBy: text('updated_by'),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at').notNull().defaultNow(),\n },\n (table) => [\n uniqueIndex('uq_exchange_rates_org_pair_time').on(\n table.organizationId,\n table.baseCurrency,\n table.targetCurrency,\n table.effectiveAt,\n ),\n index('idx_exchange_rates_org').on(table.organizationId),\n index('idx_exchange_rates_current').on(\n table.organizationId,\n table.baseCurrency,\n table.targetCurrency,\n ).where(sql`expires_at IS NULL`),\n ],\n);\n\nexport type ExchangeRate = typeof exchangeRates.$inferSelect;\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const currencySchema = createInsertSchema(currencies);\nexport const exchangeRateSchema = createInsertSchema(exchangeRates);\n","/**\n * Geo Reference Database Schema\n *\n * Core-owned country and subdivision reference data.\n * Source of truth lives in static seed data, database is the runtime read model.\n */\nimport {\n pgTable,\n text,\n timestamp,\n boolean,\n integer,\n jsonb,\n index,\n uniqueIndex,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { z } from 'zod/v4';\nimport { paginationSchema } from './common';\nimport { localeSchema } from './i18n';\n\nexport type GeoName = Record<string, string>;\nexport type GeoFlags = {\n png: string;\n svg: string;\n alt?: string | null;\n emoji?: string | null;\n};\n\nexport type MarketRegion = {\n code: string;\n name: GeoName;\n sortOrder: number;\n};\n\nexport const MARKET_REGIONS: readonly MarketRegion[] = [\n { code: 'north_america', name: { 'zh-CN': '北美', 'en-US': 'North America' }, sortOrder: 10 },\n { code: 'europe', name: { 'zh-CN': '欧洲', 'en-US': 'Europe' }, sortOrder: 20 },\n { code: 'asia_pacific', name: { 'zh-CN': '亚太', 'en-US': 'Asia Pacific' }, sortOrder: 30 },\n { code: 'latin_america', name: { 'zh-CN': '拉美', 'en-US': 'Latin America' }, sortOrder: 40 },\n { code: 'middle_east', name: { 'zh-CN': '中东', 'en-US': 'Middle East' }, sortOrder: 50 },\n { code: 'africa', name: { 'zh-CN': '非洲', 'en-US': 'Africa' }, sortOrder: 60 },\n { code: 'global', name: { 'zh-CN': '全球', 'en-US': 'Global' }, sortOrder: 70 },\n] as const;\n\nexport const geoNameSchema = z\n .record(z.string(), z.string())\n .refine((value) => Object.keys(value).length > 0, {\n message: 'At least one localized name is required',\n });\n\nexport const countryCode2Schema = z\n .string()\n .length(2)\n .regex(/^[A-Za-z]{2}$/, 'Country code must be ISO 3166-1 alpha-2')\n .transform((value) => value.toUpperCase());\n\nexport const countryCode3Schema = z\n .string()\n .length(3)\n .regex(/^[A-Za-z]{3}$/, 'Country code must be ISO 3166-1 alpha-3')\n .transform((value) => value.toUpperCase());\n\nexport const subdivisionFullCodeSchema = z\n .string()\n .min(4)\n .regex(/^[A-Za-z]{2}-[A-Za-z0-9]+$/, 'Subdivision code must look like ISO 3166-2')\n .transform((value) => value.toUpperCase());\n\nexport const geoCountries = pgTable(\n 'geo_countries',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n code2: text('code2').notNull(),\n code3: text('code3'),\n numericCode: text('numeric_code'),\n name: jsonb('name').notNull().$type<GeoName>(),\n officialName: jsonb('official_name').$type<GeoName | null>(),\n flags: jsonb('flags').$type<GeoFlags | null>(),\n currencyCode: text('currency_code'),\n languageCode: text('language_code'),\n locale: text('locale'),\n phoneCode: text('phone_code'),\n isSupported: boolean('is_supported').notNull().default(true),\n sortOrder: integer('sort_order').notNull().default(0),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at')\n .notNull()\n .defaultNow()\n .$onUpdate(() => new Date()),\n },\n (table) => [\n uniqueIndex('geo_countries_code2_uidx').on(table.code2),\n uniqueIndex('geo_countries_code3_uidx').on(table.code3),\n index('geo_countries_supported_sort_idx').on(table.isSupported, table.sortOrder),\n ]\n);\n\nexport const geoSubdivisions = pgTable(\n 'geo_subdivisions',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n countryCode2: text('country_code2')\n .notNull()\n .references(() => geoCountries.code2, { onDelete: 'cascade' }),\n code: text('code').notNull(),\n fullCode: text('full_code').notNull(),\n name: jsonb('name').notNull().$type<GeoName>(),\n type: text('type'),\n isSupported: boolean('is_supported').notNull().default(true),\n sortOrder: integer('sort_order').notNull().default(0),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at')\n .notNull()\n .defaultNow()\n .$onUpdate(() => new Date()),\n },\n (table) => [\n uniqueIndex('geo_subdivisions_full_code_uidx').on(table.fullCode),\n uniqueIndex('geo_subdivisions_country_code_uidx').on(table.countryCode2, table.code),\n index('geo_subdivisions_country_sort_idx').on(table.countryCode2, table.sortOrder),\n index('geo_subdivisions_country_supported_idx').on(table.countryCode2, table.isSupported),\n ]\n);\n\nexport type GeoCountry = typeof geoCountries.$inferSelect;\nexport type GeoSubdivision = typeof geoSubdivisions.$inferSelect;\n\nexport const geoCountrySchema = createInsertSchema(geoCountries, {\n code2: () => countryCode2Schema,\n code3: () => countryCode3Schema.optional(),\n name: () => geoNameSchema,\n officialName: () => geoNameSchema.nullish(),\n});\n\nexport const geoSubdivisionSchema = createInsertSchema(geoSubdivisions, {\n countryCode2: () => countryCode2Schema,\n fullCode: () => subdivisionFullCodeSchema,\n name: () => geoNameSchema,\n});\n\nexport const getGeoCountryQuery = z.object({\n code2: countryCode2Schema,\n locale: localeSchema.optional(),\n});\n\nexport const listGeoCountriesQuery = paginationSchema.partial().extend({\n limit: z.number().int().min(1).max(300).default(300),\n offset: z.number().int().min(0).default(0),\n locale: localeSchema.optional(),\n supportedOnly: z.boolean().default(true),\n});\n\nexport const getGeoSubdivisionQuery = z.object({\n fullCode: subdivisionFullCodeSchema,\n locale: localeSchema.optional(),\n});\n\nexport const listGeoSubdivisionsQuery = paginationSchema.partial().extend({\n limit: z.number().int().min(1).max(500).default(500),\n offset: z.number().int().min(0).default(0),\n countryCode2: countryCode2Schema,\n locale: localeSchema.optional(),\n supportedOnly: z.boolean().default(true),\n});\n\nexport const listMarketRegionsQuery = paginationSchema.partial().extend({\n limit: z.number().int().min(1).max(100).default(100),\n offset: z.number().int().min(0).default(0),\n locale: localeSchema.optional(),\n});\n","/**\n * Webhooks Database Schema\n *\n * Drizzle ORM table definitions for webhook system.\n * Implements transactional outbox pattern for reliable delivery.\n */\nimport {\n pgTable,\n text,\n timestamp,\n boolean,\n jsonb,\n integer,\n index,\n uniqueIndex,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { organization } from './auth';\n\n// ============================================================\n// Types\n// ============================================================\n\nexport type WebhookStatus = 'pending' | 'success' | 'failed';\n\nexport interface RetryPolicy {\n attempts: number;\n backoffMs: number;\n maxBackoffMs?: number;\n}\n\n// ============================================================\n// Webhook Endpoints Table\n// ============================================================\n\n/**\n * Webhook Endpoints Table\n *\n * Stores user-configured webhook endpoints with subscription settings.\n */\nexport const webhookEndpoints = pgTable(\n 'webhook_endpoints',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n url: text('url').notNull(),\n secret: text('secret').notNull(),\n events: text('events')\n .array()\n .notNull()\n .$defaultFn(() => []),\n enabled: boolean('enabled').notNull().default(true),\n retryPolicy: jsonb('retry_policy')\n .notNull()\n .$type<RetryPolicy>()\n .default({ attempts: 5, backoffMs: 1000 }),\n createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),\n updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(),\n },\n (table) => [\n index('idx_webhook_endpoints_tenant').on(table.organizationId),\n index('idx_webhook_endpoints_enabled').on(table.organizationId, table.enabled),\n uniqueIndex('uq_webhook_endpoints_tenant_url').on(table.organizationId, table.url),\n ],\n);\n\nexport type WebhookEndpoint = typeof webhookEndpoints.$inferSelect;\n\n// ============================================================\n// Webhook Deliveries Table\n// ============================================================\n\n/**\n * Webhook Deliveries Table\n *\n * Records every webhook delivery attempt with results.\n */\nexport const webhookDeliveries = pgTable(\n 'webhook_deliveries',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n // FK to webhookEndpoints table\n endpointId: text('endpoint_id')\n .notNull()\n .references(() => webhookEndpoints.id, { onDelete: 'cascade' }),\n eventType: text('event_type').notNull(),\n payload: jsonb('payload').notNull().$type<Record<string, unknown>>(),\n status: text('status').notNull().$type<WebhookStatus>().default('pending'),\n attempts: integer('attempts').notNull().default(0),\n lastAttemptAt: timestamp('last_attempt_at', { withTimezone: true }),\n responseCode: integer('response_code'),\n error: text('error'),\n dedupeKey: text('dedupe_key').notNull(),\n createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),\n updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(),\n },\n (table) => [\n index('idx_webhook_deliveries_endpoint').on(table.endpointId),\n index('idx_webhook_deliveries_tenant_status').on(table.organizationId, table.status),\n uniqueIndex('idx_webhook_deliveries_dedupe').on(table.dedupeKey),\n index('idx_webhook_deliveries_created').on(table.createdAt),\n ],\n);\n\nexport type WebhookDelivery = typeof webhookDeliveries.$inferSelect;\n\n// ============================================================\n// Webhook Outbox Table\n// ============================================================\n\n/**\n * Webhook Outbox Table\n *\n * Transactional outbox for reliable event delivery.\n * Events are written here first, then processed by a background worker.\n */\nexport const webhookOutbox = pgTable(\n 'webhook_outbox',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n // FK to webhookEndpoints table\n endpointId: text('endpoint_id')\n .notNull()\n .references(() => webhookEndpoints.id, { onDelete: 'cascade' }),\n eventType: text('event_type').notNull(),\n payload: jsonb('payload').notNull().$type<Record<string, unknown>>(),\n dedupeKey: text('dedupe_key').notNull(),\n availableAt: timestamp('available_at', { withTimezone: true }).notNull().defaultNow(),\n lockedAt: timestamp('locked_at', { withTimezone: true }),\n lockToken: text('lock_token'),\n createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),\n },\n (table) => [\n index('idx_webhook_outbox_available').on(table.availableAt),\n uniqueIndex('idx_webhook_outbox_dedupe').on(table.dedupeKey),\n index('idx_webhook_outbox_tenant').on(table.organizationId),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const webhookEndpointSchema = createInsertSchema(webhookEndpoints);\nexport const webhookDeliverySchema = createInsertSchema(webhookDeliveries);\nexport const webhookOutboxSchema = createInsertSchema(webhookOutbox);\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type WebhookOutbox = typeof webhookOutbox.$inferSelect;\nexport type InsertWebhookEndpoint = typeof webhookEndpoints.$inferInsert;\nexport type InsertWebhookDelivery = typeof webhookDeliveries.$inferInsert;\nexport type InsertWebhookOutbox = typeof webhookOutbox.$inferInsert;\n","/**\n * Scheduled Tasks Database Schema\n *\n * Drizzle ORM table definitions for scheduled task management.\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport {\n pgTable,\n text,\n timestamp,\n jsonb,\n boolean,\n integer,\n real,\n index,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { organization } from './auth';\n\n// ============================================================\n// Types\n// ============================================================\n\nexport type HandlerType = 'queue-job' | 'webhook' | 'plugin-callback';\nexport type TaskStatus = 'success' | 'failed';\nexport type ExecutionStatus = 'pending' | 'running' | 'success' | 'failed' | 'timeout';\nexport type ProviderStatus = 'registered' | 'active' | 'inactive' | 'unregistered';\nexport type CreatedByType = 'user' | 'plugin' | 'system';\n\nexport interface HandlerConfig {\n queueName?: string;\n jobName?: string;\n url?: string;\n pluginId?: string;\n methodName?: string;\n}\n\nexport interface ExecutionError {\n code: string;\n message: string;\n stack?: string;\n}\n\nexport interface ProviderCapabilities {\n supportsSeconds: boolean;\n supportsTimezone: boolean;\n supportsPauseResume: boolean;\n minInterval: number;\n maxTasks: number;\n requiresWebhook: boolean;\n}\n\n// ============================================================\n// Scheduled Tasks Table\n// ============================================================\n\n/**\n * Scheduled Tasks Table\n *\n * 存储定时任务配置\n */\nexport const scheduledTasks = pgTable(\n 'scheduled_tasks',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n name: text('name').notNull(),\n description: text('description'),\n cronExpression: text('cron_expression').notNull(),\n timezone: text('timezone').notNull().default('UTC'),\n handlerType: text('handler_type').$type<HandlerType>().notNull(),\n handlerConfig: jsonb('handler_config').notNull().$type<HandlerConfig>(),\n payload: jsonb('payload'),\n enabled: boolean('enabled').notNull().default(true),\n lastRunAt: timestamp('last_run_at', { withTimezone: true }),\n lastStatus: text('last_status').$type<TaskStatus>(),\n nextRunAt: timestamp('next_run_at', { withTimezone: true }).notNull(),\n consecutiveFailures: integer('consecutive_failures').notNull().default(0),\n maxRetries: integer('max_retries').notNull().default(3),\n retryBackoffMultiplier: real('retry_backoff_multiplier').notNull().default(2),\n providerId: text('provider_id').notNull().default('builtin'),\n providerMetadata: jsonb('provider_metadata'),\n createdBy: text('created_by').notNull(),\n createdByType: text('created_by_type').$type<CreatedByType>().notNull(),\n createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),\n updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(),\n },\n (table) => [\n index('scheduled_tasks_organization_idx').on(table.organizationId),\n index('scheduled_tasks_next_run_idx').on(table.nextRunAt, table.enabled),\n index('scheduled_tasks_provider_idx').on(table.providerId),\n ],\n);\n\nexport type ScheduledTask = typeof scheduledTasks.$inferSelect;\n\n// ============================================================\n// Task Executions Table\n// ============================================================\n\n/**\n * Task Executions Table\n *\n * 存储任务执行历史\n */\nexport const taskExecutions = pgTable(\n 'task_executions',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n // FK to scheduledTasks table\n taskId: text('task_id')\n .notNull()\n .references(() => scheduledTasks.id, { onDelete: 'cascade' }),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n scheduledAt: timestamp('scheduled_at', { withTimezone: true }).notNull(),\n startedAt: timestamp('started_at', { withTimezone: true }).notNull(),\n completedAt: timestamp('completed_at', { withTimezone: true }),\n status: text('status').$type<ExecutionStatus>().notNull(),\n attempt: integer('attempt').notNull().default(1),\n result: jsonb('result'),\n error: jsonb('error').$type<ExecutionError>(),\n lockKey: text('lock_key').notNull(),\n workerId: text('worker_id').notNull(),\n },\n (table) => [\n index('task_executions_task_idx').on(table.taskId, table.startedAt),\n index('task_executions_organization_idx').on(table.organizationId),\n index('task_executions_status_idx').on(table.status),\n ],\n);\n\nexport type TaskExecution = typeof taskExecutions.$inferSelect;\n\n// ============================================================\n// Scheduler Providers Table\n// ============================================================\n\n/**\n * Scheduler Providers Table\n *\n * 存储已注册的 Scheduler Provider(第三方插件)\n */\nexport const schedulerProviders = pgTable(\n 'scheduler_providers',\n {\n id: text('id').primaryKey(),\n name: text('name').notNull(),\n version: text('version').notNull(),\n pluginId: text('plugin_id'),\n capabilities: jsonb('capabilities').notNull().$type<ProviderCapabilities>(),\n status: text('status').$type<ProviderStatus>().notNull(),\n registeredAt: timestamp('registered_at', { withTimezone: true }).notNull().defaultNow(),\n unregisteredAt: timestamp('unregistered_at', { withTimezone: true }),\n },\n (table) => [\n index('scheduler_providers_plugin_idx').on(table.pluginId),\n index('scheduler_providers_status_idx').on(table.status),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const scheduledTaskSchema = createInsertSchema(scheduledTasks);\nexport const taskExecutionSchema = createInsertSchema(taskExecutions);\nexport const schedulerProviderSchema = createInsertSchema(schedulerProviders);\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type SchedulerProvider = typeof schedulerProviders.$inferSelect;\nexport type InsertScheduledTask = typeof scheduledTasks.$inferInsert;\nexport type InsertTaskExecution = typeof taskExecutions.$inferInsert;\nexport type InsertSchedulerProvider = typeof schedulerProviders.$inferInsert;\n"],"mappings":";;;;;;;;;;;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;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;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;;;ACMA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,0BAA0B;AACnC,SAAS,SAAS;AAMX,IAAM,OAAO,QAAQ,QAAQ;AAAA,EAClC,IAAI,KAAK,IAAI,EAAE,WAAW;AAAA,EAC1B,MAAM,KAAK,MAAM,EAAE,QAAQ;AAAA,EAC3B,OAAO,KAAK,OAAO,EAAE,QAAQ,EAAE,OAAO;AAAA,EACtC,eAAe,QAAQ,gBAAgB,EAAE,QAAQ,KAAK,EAAE,QAAQ;AAAA,EAChE,OAAO,KAAK,OAAO;AAAA,EACnB,aAAa,KAAK,cAAc,EAAE,OAAO;AAAA,EACzC,qBAAqB,QAAQ,uBAAuB,EAAE,QAAQ,KAAK,EAAE,QAAQ;AAAA,EAC7E,iBAAiB,KAAK,kBAAkB;AAAA,EACxC,WAAW,UAAU,YAAY,EAAE,WAAW,EAAE,QAAQ;AAAA,EACxD,WAAW,UAAU,YAAY,EAC9B,WAAW,EACX,UAAU,MAAM,oBAAI,KAAK,CAAC,EAC1B,QAAQ;AAAA;AAAA,EAEX,MAAM,KAAK,MAAM,EAAE,QAAQ,MAAM;AAAA,EACjC,QAAQ,QAAQ,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACvC,WAAW,KAAK,YAAY;AAAA,EAC5B,YAAY,UAAU,aAAa;AACrC,CAAC;AAMM,IAAM,UAAU;AAAA,EACrB;AAAA,EACA;AAAA,IACE,IAAI,KAAK,IAAI,EAAE,WAAW;AAAA,IAC1B,WAAW,UAAU,YAAY,EAAE,QAAQ;AAAA,IAC3C,OAAO,KAAK,OAAO,EAAE,QAAQ,EAAE,OAAO;AAAA,IACtC,WAAW,UAAU,YAAY,EAAE,WAAW,EAAE,QAAQ;AAAA,IACxD,WAAW,UAAU,YAAY,EAC9B,WAAW,EACX,UAAU,MAAM,oBAAI,KAAK,CAAC,EAC1B,QAAQ;AAAA,IACX,WAAW,KAAK,YAAY;AAAA,IAC5B,WAAW,KAAK,YAAY;AAAA;AAAA,IAE5B,QAAQ,KAAK,SAAS,EACnB,QAAQ,EACR,WAAW,MAAM,KAAK,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IACpD,sBAAsB,KAAK,wBAAwB;AAAA;AAAA,IAEnD,gBAAgB,KAAK,iBAAiB;AAAA,EACxC;AAAA,EACA,CAAC,UAAU,CAAC,MAAM,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC;AAC1D;AAMO,IAAM,4BAA4B;AAElC,IAAM,UAAU;AAAA,EACrB;AAAA,EACA;AAAA,IACE,IAAI,KAAK,IAAI,EAAE,WAAW;AAAA,IAC1B,WAAW,KAAK,YAAY,EAAE,QAAQ;AAAA,IACtC,YAAY,KAAK,aAAa,EAAE,QAAQ;AAAA,IACxC,QAAQ,KAAK,QAAQ,EAAE,QAAQ;AAAA;AAAA,IAE/B,QAAQ,KAAK,SAAS,EACnB,QAAQ,EACR,WAAW,MAAM,KAAK,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IACpD,aAAa,KAAK,cAAc;AAAA,IAChC,cAAc,KAAK,eAAe;AAAA,IAClC,SAAS,KAAK,UAAU;AAAA,IACxB,sBAAsB,UAAU,yBAAyB;AAAA,IACzD,uBAAuB,UAAU,0BAA0B;AAAA,IAC3D,OAAO,KAAK,OAAO;AAAA,IACnB,UAAU,KAAK,UAAU;AAAA,IACzB,WAAW,UAAU,YAAY,EAAE,WAAW,EAAE,QAAQ;AAAA,IACxD,WAAW,UAAU,YAAY,EAC9B,WAAW,EACX,UAAU,MAAM,oBAAI,KAAK,CAAC,EAC1B,QAAQ;AAAA,EACb;AAAA,EACA,CAAC,UAAU;AAAA,IACT,MAAM,oBAAoB,EAAE,GAAG,MAAM,MAAM;AAAA,IAC3C,YAAY,+BAA+B,EAAE,GAAG,MAAM,QAAQ,MAAM,SAAS;AAAA,EAC/E;AACF;AAMO,IAAM,eAAe;AAAA,EAC1B;AAAA,EACA;AAAA,IACE,IAAI,KAAK,IAAI,EAAE,WAAW;AAAA,IAC1B,YAAY,KAAK,YAAY,EAAE,QAAQ;AAAA,IACvC,OAAO,KAAK,OAAO,EAAE,QAAQ;AAAA,IAC7B,WAAW,UAAU,YAAY,EAAE,QAAQ;AAAA,IAC3C,WAAW,UAAU,YAAY,EAAE,WAAW,EAAE,QAAQ;AAAA,IACxD,WAAW,UAAU,YAAY,EAC9B,WAAW,EACX,UAAU,MAAM,oBAAI,KAAK,CAAC,EAC1B,QAAQ;AAAA,EACb;AAAA,EACA,CAAC,UAAU,CAAC,MAAM,6BAA6B,EAAE,GAAG,MAAM,UAAU,CAAC;AACvE;AAMO,IAAM,eAAe;AAAA,EAC1B;AAAA,EACA;AAAA,IACE,IAAI,KAAK,IAAI,EAAE,WAAW;AAAA,IAC1B,MAAM,KAAK,MAAM,EAAE,QAAQ;AAAA,IAC3B,MAAM,KAAK,MAAM,EAAE,QAAQ,EAAE,OAAO;AAAA,IACpC,MAAM,KAAK,MAAM;AAAA,IACjB,WAAW,UAAU,YAAY,EAAE,WAAW,EAAE,QAAQ;AAAA,IACxD,UAAU,KAAK,UAAU;AAAA,EAC3B;AAAA,EACA,CAAC,UAAU,CAAC,YAAY,wBAAwB,EAAE,GAAG,MAAM,IAAI,CAAC;AAClE;AAMO,IAAM,SAAS;AAAA,EACpB;AAAA,EACA;AAAA,IACE,IAAI,KAAK,IAAI,EAAE,WAAW;AAAA;AAAA,IAE1B,gBAAgB,KAAK,iBAAiB,EACnC,QAAQ,EACR,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA;AAAA,IAE5D,QAAQ,KAAK,SAAS,EACnB,QAAQ,EACR,WAAW,MAAM,KAAK,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IACpD,MAAM,KAAK,MAAM,EAAE,QAAQ,QAAQ,EAAE,QAAQ;AAAA,IAC7C,WAAW,UAAU,YAAY,EAAE,WAAW,EAAE,QAAQ;AAAA;AAAA,IAExD,QAAQ,KAAK,QAAQ,EAAE,QAAQ,QAAQ,EAAE,QAAQ;AAAA,IACjD,WAAW,KAAK,YAAY;AAAA,IAC5B,YAAY,UAAU,aAAa;AAAA,EACrC;AAAA,EACA,CAAC,UAAU;AAAA,IACT,MAAM,2BAA2B,EAAE,GAAG,MAAM,cAAc;AAAA,IAC1D,MAAM,mBAAmB,EAAE,GAAG,MAAM,MAAM;AAAA,EAC5C;AACF;AAMO,IAAM,aAAa;AAAA,EACxB;AAAA,EACA;AAAA,IACE,IAAI,KAAK,IAAI,EAAE,WAAW;AAAA;AAAA,IAE1B,gBAAgB,KAAK,iBAAiB,EACnC,QAAQ,EACR,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IAC5D,OAAO,KAAK,OAAO,EAAE,QAAQ;AAAA,IAC7B,MAAM,KAAK,MAAM;AAAA,IACjB,QAAQ,KAAK,QAAQ,EAAE,QAAQ,SAAS,EAAE,QAAQ;AAAA,IAClD,WAAW,UAAU,YAAY,EAAE,QAAQ;AAAA,IAC3C,WAAW,UAAU,YAAY,EAAE,WAAW,EAAE,QAAQ;AAAA;AAAA,IAExD,WAAW,KAAK,YAAY,EACzB,QAAQ,EACR,WAAW,MAAM,KAAK,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,EACtD;AAAA,EACA,CAAC,UAAU;AAAA,IACT,MAAM,+BAA+B,EAAE,GAAG,MAAM,cAAc;AAAA,IAC9D,MAAM,sBAAsB,EAAE,GAAG,MAAM,KAAK;AAAA,EAC9C;AACF;AAMO,IAAM,SAAS;AAAA,EACpB;AAAA,EACA;AAAA,IACE,IAAI,KAAK,IAAI,EAAE,WAAW;AAAA,IAC1B,UAAU,KAAK,WAAW,EAAE,QAAQ,SAAS,EAAE,QAAQ;AAAA,IACvD,MAAM,KAAK,MAAM;AAAA,IACjB,OAAO,KAAK,OAAO;AAAA,IACnB,QAAQ,KAAK,QAAQ;AAAA,IACrB,KAAK,KAAK,KAAK,EAAE,QAAQ;AAAA;AAAA,IAEzB,aAAa,KAAK,SAAS,EACxB,QAAQ,EACR,WAAW,MAAM,KAAK,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IACpD,gBAAgB,QAAQ,iBAAiB;AAAA,IACzC,cAAc,QAAQ,eAAe;AAAA,IACrC,cAAc,UAAU,gBAAgB;AAAA,IACxC,SAAS,QAAQ,SAAS,EAAE,QAAQ,IAAI;AAAA,IACxC,kBAAkB,QAAQ,oBAAoB,EAAE,QAAQ,IAAI;AAAA,IAC5D,qBAAqB,QAAQ,wBAAwB;AAAA,IACrD,cAAc,QAAQ,gBAAgB;AAAA,IACtC,cAAc,QAAQ,eAAe,EAAE,QAAQ,CAAC;AAAA,IAChD,WAAW,QAAQ,WAAW;AAAA,IAC9B,aAAa,UAAU,cAAc;AAAA,IACrC,WAAW,UAAU,YAAY;AAAA,IACjC,WAAW,UAAU,YAAY,EAAE,WAAW,EAAE,QAAQ;AAAA,IACxD,WAAW,UAAU,YAAY,EAC9B,WAAW,EACX,UAAU,MAAM,oBAAI,KAAK,CAAC,EAC1B,QAAQ;AAAA,IACX,aAAa,KAAK,aAAa;AAAA,IAC/B,UAAU,KAAK,UAAU;AAAA,EAC3B;AAAA,EACA,CAAC,UAAU;AAAA,IACT,MAAM,qBAAqB,EAAE,GAAG,MAAM,QAAQ;AAAA,IAC9C,MAAM,mBAAmB,EAAE,GAAG,MAAM,WAAW;AAAA,EACjD;AACF;AAMO,IAAM,aAAa,mBAAmB,IAAI;AAC1C,IAAM,gBAAgB,mBAAmB,OAAO;AAChD,IAAM,gBAAgB,mBAAmB,OAAO;AAChD,IAAM,qBAAqB,mBAAmB,YAAY;AAC1D,IAAM,qBAAqB,mBAAmB,YAAY;AAC1D,IAAM,eAAe,mBAAmB,MAAM;AAC9C,IAAM,mBAAmB,mBAAmB,UAAU;AACtD,IAAM,eAAe,mBAAmB,MAAM;AAE9C,IAAM,wBAAwB,EAAE,OAAO;AAAA,EAC5C,MAAM,EACH;AAAA,IACC,CAAC,UAAW,OAAO,UAAU,WAAW,MAAM,KAAK,IAAI;AAAA,IACvD,EAAE,OAAO,EAAE,IAAI,GAAG,sCAAQ,EAAE,IAAI,IAAI,4DAAe,EAAE,SAAS;AAAA,EAChE;AAAA,EACF,iBAAiB,EACd;AAAA,IACC,CAAC,UAAW,OAAO,UAAU,WAAW,MAAM,KAAK,IAAI;AAAA,IACvD,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,SAAS;AAAA,EACzC,EACC,UAAU,CAAC,UAAW,UAAU,KAAK,OAAO,KAAM;AACvD,CAAC;;;ACtQD;AAAA,EACE,WAAAA;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC;AAAA,EACA,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,eAAAC;AAAA,OACK;AACP,SAAS,sBAAAC,2BAA0B;AAQ5B,IAAM,OAAOC;AAAA,EAClB;AAAA,EACA;AAAA,IACE,IAAIC,MAAK,IAAI,EAAE,WAAW;AAAA,IAC1B,MAAMA,MAAK,MAAM,EAAE,QAAQ;AAAA;AAAA,IAE3B,gBAAgBA,MAAK,iBAAiB,EACnC,QAAQ,EACR,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IAC5D,WAAWC,WAAU,YAAY,EAAE,WAAW,EAAE,QAAQ;AAAA,IACxD,WAAWA,WAAU,YAAY,EAC9B,WAAW,EACX,UAAU,MAAM,oBAAI,KAAK,CAAC,EAC1B,QAAQ;AAAA;AAAA,IAEX,UAAUD,MAAK,WAAW;AAAA,IAC1B,MAAMA,MAAK,MAAM;AAAA;AAAA,IACjB,OAAOE,SAAQ,OAAO,EAAE,QAAQ,CAAC,EAAE,QAAQ;AAAA,EAC7C;AAAA,EACA,CAAC,UAAU;AAAA,IACTC,OAAM,yBAAyB,EAAE,GAAG,MAAM,cAAc;AAAA,IACxDA,OAAM,iBAAiB,EAAE,GAAG,MAAM,QAAQ;AAAA,IAC1CA,OAAM,mBAAmB,EAAE,GAAG,MAAM,gBAAgB,MAAM,IAAI;AAAA,EAChE;AACF;AAMO,IAAM,aAAaJ;AAAA,EACxB;AAAA,EACA;AAAA,IACE,IAAIC,MAAK,IAAI,EAAE,WAAW;AAAA;AAAA,IAE1B,QAAQA,MAAK,SAAS,EACnB,QAAQ,EACR,WAAW,MAAM,KAAK,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA;AAAA,IAEpD,QAAQA,MAAK,SAAS,EACnB,QAAQ,EACR,WAAW,MAAM,KAAK,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IACpD,WAAWC,WAAU,YAAY,EAAE,WAAW,EAAE,QAAQ;AAAA,EAC1D;AAAA,EACA,CAAC,UAAU;AAAA,IACTG,aAAY,2BAA2B,EAAE,GAAG,MAAM,QAAQ,MAAM,MAAM;AAAA,IACtED,OAAM,uBAAuB,EAAE,GAAG,MAAM,MAAM;AAAA,IAC9CA,OAAM,uBAAuB,EAAE,GAAG,MAAM,MAAM;AAAA,EAChD;AACF;AAMO,IAAM,aAAaE,oBAAmB,IAAI;AAC1C,IAAM,mBAAmBA,oBAAmB,UAAU;;;ACxE7D;AAAA,EACE,WAAAC;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC;AAAA,EACA;AAAA,EACA,SAAAC;AAAA,EACA,eAAAC;AAAA,OACK;AACP,SAAS,sBAAAC,2BAA0B;AAO5B,IAAM,eAAeC;AAAA,EAC1B;AAAA,EACA;AAAA,IACE,IAAIC,MAAK,IAAI,EAAE,WAAW;AAAA;AAAA,IAE1B,MAAMA,MAAK,MAAM,EAAE,QAAQ;AAAA;AAAA,IAE3B,UAAUA,MAAK,WAAW,EAAE,QAAQ;AAAA;AAAA,IAEpC,UAAUA,MAAK,WAAW,EAAE,QAAQ;AAAA;AAAA,IAEpC,gBAAgBA,MAAK,iBAAiB,EACnC,QAAQ,EACR,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA;AAAA,IAE5D,UAAU,MAAM,UAAU;AAAA,IAC1B,WAAWC,WAAU,YAAY,EAAE,WAAW,EAAE,QAAQ;AAAA,EAC1D;AAAA,EACA,CAAC,UAAU;AAAA,IACTC,OAAM,sBAAsB,EAAE,GAAG,MAAM,cAAc;AAAA,IACrDA,OAAM,yBAAyB,EAAE,GAAG,MAAM,MAAM,MAAM,QAAQ;AAAA,IAC9DA,OAAM,yBAAyB,EAAE,GAAG,MAAM,MAAM,MAAM,QAAQ;AAAA,IAC9DC,aAAY,yBAAyB,EAAE;AAAA,MACrC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAMO,IAAM,qBAAqBC,oBAAmB,YAAY;;;ACjDjE;AAAA,EACE,WAAAC;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA;AAAA,EACA,SAAAC;AAAA,EACA,eAAAC;AAAA,OACK;AACP,SAAS,sBAAAC,2BAA0B;AACnC,SAAS,KAAAC,UAAS;;;ACZlB,SAAS,KAAAC,UAAS;AASX,IAAM,mBAAmBA,GAAE,OAAO;AAAA,EACvC,OAAOA,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,QAAQ,EAAE;AAAA,EAClD,QAAQA,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;AAC3C,CAAC;AAKM,IAAM,yBAAyBA,GAAE,OAAO;AAAA,EAC7C,QAAQA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,OAAOA,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,QAAQ,EAAE;AACpD,CAAC;AASM,IAAM,aAAaA,GAAE,OAAO;AAAA,EACjC,QAAQA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,WAAWA,GAAE,KAAK,CAAC,OAAO,MAAM,CAAC,EAAE,QAAQ,KAAK;AAClD,CAAC;AASM,IAAM,eAAeA,GAAE,OAAO;AAAA,EACnC,GAAGA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAChC,CAAC;AASM,IAAM,gBAAgB,iBAAiB,MAAM,UAAU;AAKvD,IAAM,sBAAsB,cAAc,MAAM,YAAY;AAS5D,IAAM,WAAWA,GAAE,OAAO;AAAA,EAC/B,IAAIA,GAAE,OAAO;AACf,CAAC;AAKM,IAAM,aAAaA,GAAE,OAAO;AAAA,EACjC,IAAIA,GAAE,OAAO,EAAE,KAAK;AACtB,CAAC;AAKM,IAAM,iBAAiBA,GAAE,OAAO;AAAA,EACrC,KAAKA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,IAAI,CAAC;AAChC,CAAC;AASM,IAAM,kBAAkBA,GAAE,OAAO;AAAA,EACtC,WAAWA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC1C,SAASA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAC1C,CAAC;;;AD3DM,IAAM,uBAAuB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AACF;AA8BO,IAAM,gBAAgBC;AAAA,EAC3B;AAAA,EACA;AAAA,IACE,IAAIC,MAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA;AAAA,IAGvC,gBAAgBA,MAAK,iBAAiB,EACnC,QAAQ,EACR,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA;AAAA,IAG5D,QAAQA,MAAK,QAAQ,EAAE,QAAQ;AAAA;AAAA,IAC/B,MAAMA,MAAK,MAAM,EAAE,QAAQ;AAAA;AAAA,IAC3B,YAAYA,MAAK,aAAa;AAAA;AAAA;AAAA,IAG9B,WAAWC,SAAQ,YAAY,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,IACxD,WAAWA,SAAQ,YAAY,EAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA;AAAA,IAGvD,WAAWC,SAAQ,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA;AAAA,IAGpD,WAAWF,MAAK,WAAW,EAAE,QAAQ,EAAE,QAAQ,KAAK,EAAE,MAAqB;AAAA;AAAA,IAG3E,WAAWG,WAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,IACxD,WAAWA,WAAU,YAAY,EAC9B,QAAQ,EACR,WAAW,EACX,UAAU,MAAM,oBAAI,KAAK,CAAC;AAAA,EAC/B;AAAA,EACA,CAAC,UAAU;AAAA;AAAA,IAETC,aAAY,gCAAgC,EAAE;AAAA,MAC5C,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA;AAAA,IAEAC,OAAM,wBAAwB,EAAE,GAAG,MAAM,cAAc;AAAA;AAAA,IAEvDA,OAAM,4BAA4B,EAAE,GAAG,MAAM,gBAAgB,MAAM,SAAS;AAAA,EAC9E;AACF;AAgBO,IAAM,eAAeN;AAAA,EAC1B;AAAA,EACA;AAAA,IACE,IAAIC,MAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA;AAAA,IAGvC,gBAAgBA,MAAK,iBAAiB,EACnC,QAAQ,EACR,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA;AAAA,IAG5D,KAAKA,MAAK,KAAK,EAAE,QAAQ;AAAA;AAAA,IACzB,WAAWA,MAAK,WAAW,EAAE,QAAQ;AAAA;AAAA;AAAA,IAGrC,MAAMA,MAAK,MAAM,EAAE,QAAQ,EAAE,QAAQ,MAAM,EAAE,MAAuB;AAAA;AAAA,IAGpE,cAAcM,OAAM,cAAc,EAC/B,QAAQ,EACR,QAAQ,CAAC,CAAC,EACV,MAA0B;AAAA;AAAA,IAG7B,aAAaN,MAAK,aAAa;AAAA;AAAA,IAG/B,QAAQA,MAAK,QAAQ,EAAE,QAAQ,EAAE,QAAQ,MAAM,EAAE,MAAyB;AAAA,IAC1E,UAAUA,MAAK,WAAW;AAAA;AAAA;AAAA;AAAA,IAI1B,cAAcC,SAAQ,eAAe,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,IAC9D,iBAAiBK,OAAM,kBAAkB,EACtC,QAAQ,EACR,QAAQ,CAAC,CAAC,EACV,MAAgB;AAAA,IACnB,iBAAiBA,OAAM,kBAAkB,EACtC,QAAQ,EACR,QAAQ,CAAC,CAAC,EACV,MAAgB;AAAA,IACnB,eAAe,QAAQ,kBAAkB;AAAA,MACvC,QAAQ;AAAA,MACR,MAAM;AAAA,IACR,CAAC,EACE,QAAQ,EACR,QAAQ,YAAY,EACpB,MAAyB;AAAA;AAAA,IAG5B,WAAWL,SAAQ,YAAY,EAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA;AAAA,IAGvD,SAASC,SAAQ,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA;AAAA,IAG/C,WAAWC,WAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,IACxD,WAAWA,WAAU,YAAY,EAC9B,QAAQ,EACR,WAAW,EACX,UAAU,MAAM,oBAAI,KAAK,CAAC;AAAA,EAC/B;AAAA,EACA,CAAC,UAAU;AAAA;AAAA,IAETC,aAAY,+BAA+B,EAAE;AAAA,MAC3C,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA;AAAA,IAEAC,OAAM,uBAAuB,EAAE,GAAG,MAAM,cAAc;AAAA;AAAA,IAEtDA,OAAM,0BAA0B,EAAE,GAAG,MAAM,gBAAgB,MAAM,SAAS;AAAA;AAAA,IAE1EA,OAAM,0BAA0B,EAAE,GAAG,MAAM,QAAQ,MAAM,QAAQ;AAAA,EACnE;AACF;AAQO,IAAM,qBAAqBN;AAAA,EAChC;AAAA,EACA;AAAA,IACE,IAAIC,MAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA,IACvC,gBAAgBA,MAAK,iBAAiB,EACnC,QAAQ,EACR,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IAC5D,WAAWA,MAAK,WAAW,EAAE,QAAQ;AAAA,IACrC,YAAYE,SAAQ,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA,IACrD,YAAYD,SAAQ,aAAa,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,IAC1D,WAAWE,WAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,IACxD,WAAWA,WAAU,YAAY,EAC9B,QAAQ,EACR,WAAW,EACX,UAAU,MAAM,oBAAI,KAAK,CAAC;AAAA,EAC/B;AAAA,EACA,CAAC,UAAU;AAAA,IACTC,aAAY,kCAAkC,EAAE;AAAA,MAC9C,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,IACAC,OAAM,gCAAgC,EAAE;AAAA,MACtC,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAaA,SAAS,mBAAmB,OAAoC;AAC9D,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,QAAM,SAAS,MAAM,KAAK;AAC1B,MAAI,CAAC,UAAU,WAAW,IAAK,QAAO;AAEtC,MAAI;AACF,WAAO,KAAK,oBAAoB,MAAM,EAAE,CAAC;AAAA,EAC3C,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,IAAM,eAAeE,GACzB,OAAO,EACP,IAAI,CAAC,EACL,OAAO,CAAC,UAAU,mBAAmB,KAAK,MAAM,QAAW,uBAAuB,EAClF,UAAU,CAAC,UAAU,mBAAmB,KAAK,CAAE;AAE3C,IAAM,2BAA2BA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,OAAO,CAAC;AAEhE,IAAM,sBAAsBA,GAAE,KAAK,CAAC,OAAO,KAAK,CAAC;AACjD,IAAM,wBAAwBA,GAAE,KAAK,CAAC,QAAQ,KAAK,CAAC;AACpD,IAAM,0BAA0BA,GAAE,KAAK,CAAC,QAAQ,UAAU,MAAM,CAAC;AACjE,IAAM,0BAA0BA,GAAE,KAAK,oBAAoB;AAG3D,IAAM,qBAAqBC,oBAAmB,eAAe;AAAA,EAClE,QAAQ,MAAM;AAAA,EACd,MAAM,CAAC,WAAW,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE;AAAA,EACtC,YAAY,CAAC,WAAW,OAAO,IAAI,EAAE;AACvC,CAAC;AAGM,IAAM,oBAAoBA,oBAAmB,cAAc;AAAA,EAChE,KAAK,CAAC,WAAW,OAAO,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EACtC,WAAW,CAAC,WAAW,OAAO,IAAI,CAAC,EAAE,IAAI,GAAG;AAC9C,CAAC;AAOM,IAAM,uBAAuBD,GAAE,OAAO;AAAA,EAC3C,QAAQ;AAAA,EACR,YAAYA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACzC,SAASA,GAAE,OAAO,EAAE,SAAS;AAC/B,CAAC;AAGM,IAAM,sBAAsBA,GAAE,OAAO;AAAA,EAC1C,QAAQ;AAAA,EACR,YAAYA,GAAE,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE;AAAA,EAC7D,UAAUA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,OAAO,CAAC,EAAE,SAAS;AACtD,CAAC;AAEM,IAAM,mBAAmBA,GAAE,OAAO;AAAA,EACvC,SAASA,GAAE,OAAO;AAAA,EAClB,aAAaA,GAAE,QAAQ;AAAA,EACvB,UAAU,yBAAyB,SAAS;AAC9C,CAAC;AAEM,IAAM,6BAA6BA,GAAE,OAAO;AAAA,EACjD,SAASA,GAAE,OAAOA,GAAE,OAAO,GAAG,gBAAgB;AAChD,CAAC;AAGM,IAAM,yBAAyB,iBAAiB,QAAQ;AAGxD,IAAM,wBAAwBA,GAAE,OAAO;AAAA,EAC5C,WAAWA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,KAAKA,GAAE,OAAO,EAAE,SAAS;AAC3B,CAAC,EAAE,MAAM,iBAAiB,QAAQ,CAAC;AAO5B,IAAM,6BAA6BA,GAAE,OAAO;AAAA,EACjD,QAAQ;AACV,CAAC;AAGM,IAAM,8BAA8BA,GAAE,OAAO;AAAA,EAClD,UAAUA,GAAE,MAAMA,GAAE,OAAO;AAAA,IACzB,KAAKA,GAAE,OAAO;AAAA,IACd,WAAWA,GAAE,OAAO;AAAA,IACpB,cAAc;AAAA,EAChB,CAAC,CAAC;AACJ,CAAC;;;AE5VD;AAAA,EACE,WAAAE;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC;AAAA,EACA,WAAAC;AAAA,EACA,eAAAC;AAAA,EACA,SAAAC;AAAA,OACK;AACP,SAAS,sBAAAC,2BAA0B;AAe5B,IAAM,QAAQC;AAAA,EACnB;AAAA,EACA;AAAA,IACE,IAAIC,MAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA;AAAA,IAEvC,gBAAgBA,MAAK,iBAAiB,EACnC,QAAQ,EACR,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IAC5D,MAAMA,MAAK,MAAM,EAAE,QAAQ;AAAA,IAC3B,MAAMA,MAAK,MAAM,EAAE,QAAQ;AAAA,IAC3B,aAAaA,MAAK,aAAa;AAAA,IAC/B,UAAUC,SAAQ,WAAW,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,IACtD,WAAWC,WAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,IACxD,WAAWA,WAAU,YAAY,EAC9B,QAAQ,EACR,WAAW,EACX,UAAU,MAAM,oBAAI,KAAK,CAAC;AAAA,EAC/B;AAAA,EACA,CAAC,UAAU;AAAA,IACTC,aAAY,qBAAqB,EAAE,GAAG,MAAM,gBAAgB,MAAM,IAAI;AAAA,IACtEC,OAAM,2BAA2B,EAAE,GAAG,MAAM,cAAc;AAAA,EAC5D;AACF;AAMO,IAAM,aAAaC,oBAAmB,KAAK;;;ACrDlD;AAAA,EACE,WAAAC;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC;AAAA,EACA,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,eAAAC;AAAA,EACA,SAAAC;AAAA,OACK;AACP,SAAS,sBAAAC,2BAA0B;AAoB5B,IAAM,kBAAkBC;AAAA,EAC7B;AAAA,EACA;AAAA,IACE,IAAIC,MAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA;AAAA,IAEvC,QAAQA,MAAK,SAAS,EACnB,QAAQ,EACR,WAAW,MAAM,MAAM,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA;AAAA,IAErD,QAAQA,MAAK,QAAQ,EAAE,QAAQ;AAAA,IAC/B,SAASA,MAAK,SAAS,EAAE,QAAQ;AAAA,IACjC,QAAQC,OAAM,QAAQ,EAAE,MAAuB;AAAA,IAC/C,YAAYA,OAAM,YAAY,EAAE,MAAsC;AAAA,IACtE,UAAUC,SAAQ,UAAU,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA;AAAA,IAErD,QAAQF,MAAK,QAAQ;AAAA;AAAA,IACrB,WAAWG,WAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EAC1D;AAAA,EACA,CAAC,UAAU;AAAA;AAAA,IAETC,aAAY,2CAA2C,EAAE;AAAA,MACvD,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,IACAC,OAAM,8BAA8B,EAAE,GAAG,MAAM,MAAM;AAAA,IACrDA,OAAM,6BAA6B,EAAE,GAAG,MAAM,MAAM;AAAA,EACtD;AACF;AAMO,IAAM,uBAAuBC,oBAAmB,eAAe;;;ACjEtE,SAAS,WAAAC,UAAS,QAAAC,OAAM,aAAAC,kBAAiB;AACzC,SAAS,sBAAAC,2BAA0B;AAW5B,IAAM,cAAcH,SAAQ,eAAe;AAAA,EAChD,IAAIC,MAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA,EACvC,YAAYA,MAAK,YAAY,EAAE,QAAQ,EAAE,OAAO;AAAA,EAChD,QAAQA,MAAK,QAAQ,EAAE,QAAQ;AAAA;AAAA,EAC/B,aAAaA,MAAK,aAAa;AAAA,EAC/B,WAAWC,WAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAC1D,CAAC;AAMM,IAAM,mBAAmBC,oBAAmB,WAAW;AAcvD,IAAM,mBAA6C;AAAA,EACxD,OAAO,CAAC,OAAO;AAAA,EACf,OAAO,CAAC,oBAAoB,cAAc,iBAAiB,aAAa;AAAA,EACxE,QAAQ,CAAC,wBAAwB,sBAAsB,gBAAgB;AAAA,EACvE,QAAQ,CAAC,sBAAsB,mBAAmB;AAAA,EAClD,QAAQ,CAAC,qBAAqB;AAChC;;;AC9CA;AAAA,EACE,WAAAC;AAAA,EACA,QAAAC;AAAA,EACA,WAAAC;AAAA,EACA,aAAAC;AAAA,EACA,SAAAC;AAAA,EACA,SAAAC;AAAA,EACA,eAAAC;AAAA,EACA,WAAAC;AAAA,OACK;AACP,SAAS,sBAAAC,2BAA0B;AACnC,SAAS,KAAAC,UAAS;AAiCX,IAAM,QAAQC;AAAA,EACnB;AAAA,EACA;AAAA;AAAA,IAEE,IAAIC,MAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA;AAAA;AAAA,IAIvC,MAAMA,MAAK,MAAM,EAAE,QAAQ;AAAA;AAAA,IAG3B,MAAMA,MAAK,MAAM,EAAE,QAAQ,EAAE,MAAgB;AAAA;AAAA;AAAA,IAG7C,QAAQA,MAAK,QAAQ,EAAE,QAAQ;AAAA;AAAA;AAAA,IAG/B,gBAAgBA,MAAK,iBAAiB,EACnC,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA;AAAA,IAG5D,OAAOA,MAAK,OAAO,EAAE,QAAQ;AAAA,IAC7B,MAAMA,MAAK,MAAM;AAAA,IACjB,MAAMA,MAAK,MAAM;AAAA;AAAA,IACjB,UAAUA,MAAK,WAAW,EAAE,QAAQ,EAAE,QAAQ,OAAO,EAAE,MAAoB;AAAA;AAAA,IAG3E,YAAYA,MAAK,aAAa;AAAA;AAAA,IAC9B,OAAOC,SAAQ,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA;AAAA,IAG3C,SAASC,SAAQ,SAAS,EAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA;AAAA;AAAA,IAGlD,oBAAoBF,MAAK,qBAAqB;AAAA;AAAA,IAG9C,QAAQA,MAAK,QAAQ,EAAE,QAAQ,EAAE,MAAkB;AAAA;AAAA,IAGnD,UAAUG,OAAM,UAAU;AAAA;AAAA,IAG1B,WAAWC,WAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,IACxD,WAAWA,WAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EAC1D;AAAA,EACA,CAAC,UAAU;AAAA;AAAA,IAETC,aAAY,oBAAoB,EAAE,GAAG,MAAM,MAAM,MAAM,cAAc;AAAA;AAAA,IAErEC,OAAM,eAAe,EAAE,GAAG,MAAM,cAAc;AAAA,IAC9CA,OAAM,sBAAsB,EAAE,GAAG,MAAM,QAAQ,MAAM,cAAc;AAAA,IACnEA,OAAM,kBAAkB,EAAE,GAAG,MAAM,MAAM;AAAA,IACzCA,OAAM,uBAAuB,EAAE,GAAG,MAAM,UAAU;AAAA,IAClDA,OAAM,gBAAgB,EAAE,GAAG,MAAM,IAAI;AAAA,EACvC;AACF;AAUO,IAAM,iBAAiB;AAOvB,IAAM,aAAaC,oBAAmB,KAAK;AAO3C,IAAM,eAAeC,GAAE,OAAO;AAAA,EACnC,MAAMA,GAAE,OAAO;AACjB,CAAC;AAGM,IAAM,iBAAiBA,GAAE,OAAO;AAAA,EACrC,QAAQA,GAAE,KAAK,CAAC,SAAS,KAAK,CAAC;AACjC,CAAC;AAGM,IAAM,oBAAoBA,GAAE,OAAO;AAAA,EACxC,QAAQA,GAAE,KAAK,CAAC,SAAS,KAAK,CAAC,EAAE,SAAS;AAC5C,CAAC,EAAE,MAAM,iBAAiB,QAAQ,CAAC;AAO5B,IAAM,qBAAqBA,GAAE,OAAO;AAAA,EACzC,MAAMA,GAAE,OAAO;AACjB,CAAC;AAGM,IAAM,+BAA+BA,GAAE,OAAO;AAAA,EACnD,MAAMA,GAAE,OAAO;AAAA,EACf,SAASA,GAAE,QAAQ;AACrB,CAAC;AAGM,IAAM,mBAAmB,WAAW,KAAK;AAAA,EAC9C,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,UAAU;AACZ,CAAC,EAAE,OAAO;AAAA,EACR,UAAUA,GAAE,KAAK,CAAC,SAAS,UAAU,CAAC,EAAE,SAAS;AAAA,EACjD,QAAQA,GAAE,KAAK,CAAC,SAAS,KAAK,CAAC;AACjC,CAAC;AAGM,IAAM,mBAAmB,WAAW,KAAK;AAAA,EAC9C,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,SAAS;AAAA,EACT,UAAU;AACZ,CAAC,EAAE,QAAQ,EAAE,OAAO;AAAA,EAClB,UAAUA,GAAE,KAAK,CAAC,SAAS,UAAU,CAAC,EAAE,SAAS;AACnD,CAAC;AAGM,IAAM,qBAAqB,WAC/B,KAAK;AAAA,EACJ,IAAI;AAAA,EACJ,WAAW;AAAA,EACX,WAAW;AACb,CAAC,EACA,QAAQ,EACR,OAAO;AAAA,EACN,MAAMA,GAAE,OAAO;AAAA;AACjB,CAAC;;;ACnMH;AAAA,EAEE,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC;AAAA,EACA,SAAAC;AAAA,EACA,eAAAC;AAAA,EACA,WAAAC;AAAA,OACK;AACP,SAAS,WAAW;AACpB,SAAS,sBAAAC,2BAA0B;AACnC,SAAS,KAAAC,UAAS;AA6BX,IAAM,4BAA4B;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,IAAM,sBAAsB,CAAC,eAAe,aAAa;AAGzD,IAAM,4BAA4B,CAAC,WAAW,UAAU,aAAa,UAAU;AAG/E,IAAM,yBAAyB,CAAC,YAAY,UAAU,QAAQ;AAG9D,IAAM,8BAA8B;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AA6BO,IAAM,UAAUC;AAAA,EACrB;AAAA,EACA;AAAA,IACE,IAAIC,MAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA,IACvC,UAAUA,MAAK,WAAW,EAAE,QAAQ;AAAA;AAAA,IAEpC,gBAAgBA,MAAK,iBAAiB,EACnC,QAAQ,EACR,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IAC5D,SAASA,MAAK,SAAS,EAAE,QAAQ;AAAA,IACjC,oBAAoBA,MAAK,qBAAqB,EAC3C,QAAQ,EACR,MAAgC,EAChC,QAAQ,WAAW;AAAA,IACtB,kBAAkBA,MAAK,mBAAmB,EACvC,QAAQ,EACR,MAA8B,EAC9B,QAAQ,SAAS;AAAA,IACpB,QAAQA,MAAK,QAAQ,EAAE,QAAQ,EAAE,MAAoB;AAAA,IACrD,UAAUC,OAAM,UAAU,EAAE,QAAQ,EAAE,MAA0B;AAAA,IAChE,aAAaC,WAAU,cAAc,EAAE,QAAQ,EAAE,WAAW;AAAA,IAC5D,WAAWA,WAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,IACxD,qBAAqBA,WAAU,uBAAuB;AAAA,EACxD;AAAA,EACA,CAAC,UAAU;AAAA,IACTC,aAAY,uBAAuB,EAAE,GAAG,MAAM,gBAAgB,MAAM,QAAQ;AAAA,IAC5EC,OAAM,iCAAiC,EAAE;AAAA,MACvC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAWO,IAAM,kBAAkBL;AAAA,EAC7B;AAAA,EACA;AAAA,IACE,IAAIC,MAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA,IACvC,UAAUA,MAAK,WAAW,EAAE,QAAQ;AAAA,IACpC,SAASA,MAAK,SAAS,EAAE,QAAQ;AAAA,IACjC,QAAQA,MAAK,QAAQ,EAAE,QAAQ,EAAE,MAA4B;AAAA,IAC7D,UAAUC,OAAM,UAAU,EAAE,QAAQ,EAAE,MAA0B;AAAA,IAChE,aAAaC,WAAU,cAAc,EAAE,QAAQ,EAAE,WAAW;AAAA,IAC5D,WAAWA,WAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EAC1D;AAAA,EACA,CAAC,UAAU;AAAA,IACTC,aAAY,4BAA4B,EAAE,GAAG,MAAM,QAAQ;AAAA,EAC7D;AACF;AAUO,IAAM,wBAAwBJ;AAAA,EACnC;AAAA,EACA;AAAA,IACE,IAAIC,MAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA,IACvC,UAAUA,MAAK,WAAW,EAAE,QAAQ;AAAA,IACpC,UAAUK,SAAQ,aAAa,EAAE,QAAQ,IAAI,CAAC,EAAE,QAAQ;AAAA,IACxD,SAASA,SAAQ,WAAW,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ;AAAA,IACpD,OAAOA,SAAQ,SAAS,EAAE,QAAQ,IAAI,MAAM,0BAA0B,CAAC,EACpE,QAAQ,EACR,MAA8B;AAAA,IACjC,YAAYA,SAAQ,eAAe,EAAE,QAAQ,IAAI,MAAM,oBAAoB,CAAC,EACzE,QAAQ,EACR,MAAwB;AAAA,IAC3B,UAAUJ,OAAM,UAAU,EAAE,QAAQ,EAAE,MAA0B;AAAA,IAChE,SAASA,OAAM,SAAS,EAAE,QAAQ,EAAE,MAA+B;AAAA,IACnE,aAAaD,MAAK,cAAc,EAAE,QAAQ;AAAA,IAC1C,gBAAgBK,SAAQ,mBAAmB,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ;AAAA,IACnE,aAAaA,SAAQ,gBAAgB,EAAE,QAAQ,IAAI,CAAC;AAAA,IACpD,eAAeA,SAAQ,kBAAkB,EAAE,QAAQ,GAAG,CAAC;AAAA,IACvD,oBAAoBJ,OAAM,qBAAqB,EAAE,MAA+B;AAAA,IAChF,mBAAmBA,OAAM,oBAAoB,EAAE,MAA+B;AAAA;AAAA,IAE9E,WAAWA,OAAM,WAAW,EAAE,MAA+B;AAAA,IAC7D,aAAaC,WAAU,cAAc,EAAE,QAAQ;AAAA,IAC/C,WAAWA,WAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EAC1D;AAAA,EACA,CAAC,UAAU;AAAA,IACTC,aAAY,+BAA+B,EAAE,GAAG,MAAM,UAAU,MAAM,UAAU,MAAM,OAAO;AAAA,IAC7FC,OAAM,mCAAmC,EAAE,GAAG,MAAM,UAAU,MAAM,OAAO,MAAM,WAAW;AAAA,EAC9F;AACF;AAGO,IAAM,0BAA0BL,SAAQ,8BAA8B;AAAA,EAC3E,UAAUC,MAAK,WAAW,EAAE,WAAW;AAAA,EACvC,YAAYK,SAAQ,eAAe,EAAE,QAAQ,IAAI,CAAC,EAAE,QAAQ;AAAA,EAC5D,aAAaH,WAAU,cAAc,EAAE,QAAQ;AAAA,EAC/C,WAAWA,WAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAC1D,CAAC;AAKM,IAAM,oBAAoBH;AAAA,EAC/B;AAAA,EACA;AAAA,IACE,IAAIC,MAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA,IACvC,UAAUK,SAAQ,aAAa,EAAE,QAAQ,IAAI,CAAC,EAAE,QAAQ;AAAA,IACxD,WAAWA,SAAQ,aAAa,EAAE,QAAQ,IAAI,MAAM,0BAA0B,CAAC,EAC5E,QAAQ,EACR,MAA8B;AAAA,IACjC,QAAQA,SAAQ,UAAU,EAAE,QAAQ,IAAI,MAAM,uBAAuB,CAAC,EACnE,QAAQ,EACR,MAA2B;AAAA,IAC9B,UAAUL,MAAK,WAAW;AAAA,IAC1B,WAAWA,MAAK,YAAY,EACzB,WAAW,MAAM,sBAAsB,IAAI,EAAE,UAAU,WAAW,CAAC;AAAA,IACtE,iBAAiBK,SAAQ,oBAAoB,EAAE,QAAQ,GAAG,CAAC;AAAA,IAC3D,eAAeA,SAAQ,kBAAkB,EAAE,QAAQ,GAAG,CAAC;AAAA,IACvD,QAAQA,SAAQ,UAAU,EAAE,QAAQ,IAAI,MAAM,4BAA4B,CAAC,EACxE,QAAQ,EACR,MAA8B,EAC9B,QAAQ,QAAQ;AAAA,IACnB,gBAAgBA,SAAQ,mBAAmB,EAAE,QAAQ,GAAG,CAAC;AAAA,IACzD,aAAaL,MAAK,cAAc,EAAE,QAAQ;AAAA,IAC1C,WAAWK,SAAQ,cAAc,EAAE,QAAQ,GAAG,CAAC;AAAA,IAC/C,cAAcL,MAAK,eAAe;AAAA,IAClC,UAAUC,OAAM,UAAU,EAAE,QAAQ,EAAE,MAA+B,EAAE,QAAQ,CAAC,CAAC;AAAA,IACjF,WAAWC,WAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,IACxD,WAAWA,WAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,IACxD,aAAaA,WAAU,cAAc;AAAA,EACvC;AAAA,EACA,CAAC,UAAU;AAAA,IACTC,aAAY,wCAAwC,EACjD,GAAG,MAAM,QAAQ,EACjB,MAAM,MAAM,MAAM,MAAM,4DAA4D;AAAA,IACvFC,OAAM,gCAAgC,EAAE,GAAG,MAAM,UAAU,MAAM,SAAS;AAAA,IAC1EA,OAAM,gCAAgC,EAAE,GAAG,MAAM,QAAQ,MAAM,SAAS;AAAA,EAC1E;AACF;AAWO,IAAM,gBAAgBL;AAAA,EAC3B;AAAA,EACA;AAAA,IACE,IAAIC,MAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA,IACvC,UAAUA,MAAK,WAAW,EAAE,QAAQ;AAAA;AAAA,IAEpC,gBAAgBA,MAAK,iBAAiB,EACnC,QAAQ,EACR,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IAC5D,KAAKA,MAAK,KAAK,EAAE,QAAQ;AAAA,IACzB,OAAOC,OAAM,OAAO,EAAE,QAAQ;AAAA,IAC9B,WAAWC,WAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EAC1D;AAAA,EACA,CAAC,UAAU;AAAA,IACTC,aAAY,mBAAmB,EAAE;AAAA,MAC/B,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAMO,IAAM,eAAeG,oBAAmB,OAAO;AAC/C,IAAM,uBAAuBA,oBAAmB,eAAe;AAC/D,IAAM,6BAA6BA,oBAAmB,uBAAuB;AAAA,EAClF,aAAa,MAAMC,GAAE,IAAI;AAAA,EACzB,gBAAgB,MAAMA,GAAE,OAAO,EAAE,MAAM,gBAAgB;AACzD,CAAC;AACM,IAAM,yBAAyBD,oBAAmB,iBAAiB;AACnE,IAAM,qBAAqBA,oBAAmB,aAAa;AAE3D,IAAM,yBAAyBC,GAAE,OAAO;AAAA,EAC7C,OAAOA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EAClD,OAAOA,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,QAAQ,EAAE;AAAA,EAClD,QAAQA,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC;AAClD,CAAC;AAEM,IAAM,oCAAoCA,GAAE,OAAO;AAAA,EACxD,UAAUA,GAAE,OAAO,EAAE,MAAM,uCAAuC;AAAA,EAClE,SAASA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE;AACnC,CAAC;AAEM,IAAM,6BAA6BA,GAAE,OAAO;AAAA,EACjD,UAAUA,GAAE,OAAO,EAAE,MAAM,uCAAuC;AAAA,EAClE,SAASA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE;AAAA,EACjC,WAAWA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,MAAM,OAAO,IAAI;AAAA,EAC5D,QAAQA,GAAE,OAAO,EAAE,MAAM,gBAAgB;AAC3C,CAAC;AAEM,IAAM,6BAA6BA,GAAE,OAAO;AAAA,EACjD,UAAUA,GAAE,OAAO,EAAE,KAAK;AAAA,EAC1B,QAAQA,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACrC,aAAaA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,OAAO,IAAI;AAChD,CAAC;AAEM,IAAM,+BAA+BA,GAAE,OAAO;AAAA,EACnD,UAAUA,GAAE,OAAO,EAAE,KAAK;AAC5B,CAAC;AAEM,IAAM,2BAA2B,uBAAuB,KAAK,EAAE,IAAI,KAAK,CAAC,EAAE,SAAS;AACpF,IAAM,sCAAsCA,GAAE,OAAO;AAAA,EAC1D,UAAUA,GAAE,OAAO,EAAE,MAAM,uCAAuC;AAAA,EAClE,iBAAiBA,GAAE,KAAK,CAAC,UAAU,WAAW,QAAQ,CAAC,EAAE,SAAS;AAAA,EAClE,WAAWA,GAAE,QAAQ,EAAE,SAAS;AAClC,CAAC;AACM,IAAM,gCAAgC;;;AC5U7C,SAAS,WAAAC,WAAS,QAAAC,QAAM,aAAAC,aAAW,eAAAC,oBAAmB;AACtD,SAAS,sBAAAC,4BAA0B;AAmB5B,IAAM,mBAAmBJ;AAAA,EAC9B;AAAA,EACA;AAAA,IACE,IAAIC,OAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA,IACvC,UAAUA,OAAK,WAAW,EAAE,QAAQ;AAAA;AAAA,IAEpC,gBAAgBA,OAAK,iBAAiB,EACnC,QAAQ;AAAA,IACX,eAAeA,OAAK,gBAAgB,EAAE,QAAQ;AAAA,IAC9C,WAAWC,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,IACxD,UAAUD,OAAK,UAAU,EAAE,QAAQ;AAAA;AAAA,EACrC;AAAA,EACA,CAAC,UAAU;AAAA,IACTE,aAAY,yBAAyB,EAAE;AAAA,MACrC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAMO,IAAM,wBAAwBC,qBAAmB,gBAAgB;;;AC9CxE;AAAA,EACE,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,SAAAC;AAAA,EACA;AAAA,EACA,WAAAC;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC;AAAA,EACA,eAAAC;AAAA,EACA,WAAAC;AAAA,OACK;AAGA,IAAM,+BAA+B;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,IAAM,uCAAuC;AAAA,EAClD;AAAA,EACA;AAAA,EACA;AACF;AAGO,IAAM,gBAAgBC;AAAA,EAC3B;AAAA,EACA;AAAA,IACE,IAAIC,OAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA,IACvC,gBAAgBA,OAAK,iBAAiB,EACnC,QAAQ,EACR,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IAC5D,UAAUA,OAAK,WAAW,EAAE,QAAQ;AAAA,IACpC,QAAQC,SAAQ,UAAU,EAAE,QAAQ,IAAI,CAAC,EAAE,QAAQ;AAAA,IACnD,UAAUD,OAAK,WAAW,EAAE,QAAQ;AAAA,IACpC,OAAOC,SAAQ,SAAS,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ;AAAA,IAChD,MAAMA,SAAQ,QAAQ,EAAE,QAAQ,GAAG,CAAC,EACjC,QAAQ,EACR,MAAgC;AAAA,IACnC,WAAWD,OAAK,YAAY;AAAA,IAC5B,aAAa,QAAQ,cAAc;AAAA,IACnC,cAAcE,SAAQ,eAAe;AAAA,IACrC,WAAWC,YAAU,cAAc,EAAE,cAAc,KAAK,CAAC;AAAA,IACzD,WAAWC,OAAM,YAAY,EAAE,MAAe;AAAA,IAC9C,WAAWH,SAAQ,cAAc,EAAE,QAAQ,IAAI,CAAC;AAAA,IAChD,OAAOD,OAAK,QAAQ;AAAA,IACpB,SAASA,OAAK,SAAS;AAAA,IACvB,QAAQA,OAAK,QAAQ;AAAA,IACrB,QAAQC,SAAQ,UAAU,EAAE,QAAQ,GAAG,CAAC,EACrC,QAAQ,EACR,MAAuC,EACvC,QAAQ,QAAQ;AAAA,IACnB,UAAUE,YAAU,aAAa,EAAE,cAAc,KAAK,CAAC,EAAE,QAAQ,EAAE,WAAW;AAAA,IAC9E,WAAWA,YAAU,cAAc,EAAE,cAAc,KAAK,CAAC,EAAE,QAAQ,EAAE,WAAW;AAAA,IAChF,WAAWA,YAAU,cAAc,EAAE,cAAc,KAAK,CAAC,EAAE,QAAQ,EAAE,WAAW;AAAA,EAClF;AAAA,EACA,CAAC,UAAU;AAAA,IACTE,cAAY,6BAA6B,EAAE;AAAA,MACzC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,IACAC,OAAM,2BAA2B,EAAE;AAAA,MACjC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,IACAA,OAAM,0BAA0B,EAAE;AAAA,MAChC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,IACAA,OAAM,wBAAwB,EAAE;AAAA,MAC9B,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AACF;;;AC7EA,SAAS,SAAAC,SAAO,WAAAC,UAAS,WAAAC,WAAS,QAAAC,QAAM,aAAAC,aAAW,eAAAC,eAAa,WAAAC,gBAAe;AAC/E,SAAS,OAAAC,YAAW;AAEb,IAAM,0BAA0B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAKO,IAAM,iCAAiC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,yBAAyBL;AAAA,EACpC;AAAA,EACA;AAAA,IACE,IAAIC,OAAK,IAAI,EACV,WAAW,EACX,QAAQI,uBAAsB;AAAA,IACjC,gBAAgBJ,OAAK,iBAAiB,EAAE,QAAQ;AAAA;AAAA,IAEhD,iBAAiBA,OAAK,mBAAmB,EAAE,QAAQ;AAAA;AAAA,IAEnD,SAASA,OAAK,SAAS,EAAE,QAAQ;AAAA;AAAA,IAEjC,UAAUA,OAAK,WAAW,EAAE,QAAQ;AAAA,IACpC,UAAUF,SAAQ,UAAU,EAAE,QAAQ;AAAA;AAAA,IAEtC,UAAUE,OAAK,WAAW,EAAE,QAAQ;AAAA;AAAA,IAEpC,OAAOA,OAAK,OAAO,EAAE,QAAQ;AAAA,IAC7B,QAAQG,SAAQ,UAAU,EAAE,QAAQ,IAAI,MAAM,wBAAwB,CAAC,EACpE,QAAQ,EACR,MAA2B,EAC3B,QAAQ,UAAU;AAAA,IACrB,SAASL,SAAQ,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA;AAAA,IAE/C,aAAaE,OAAK,cAAc;AAAA,IAChC,WAAWA,OAAK,YAAY;AAAA;AAAA,IAE5B,SAASA,OAAK,SAAS;AAAA,IACvB,WAAWC,YAAU,cAAc,EAAE,cAAc,KAAK,CAAC,EAAE,QAAQ,EAAE,WAAW;AAAA,IAChF,WAAWA,YAAU,cAAc,EAAE,cAAc,KAAK,CAAC,EAAE,QAAQ,EAAE,WAAW;AAAA,IAChF,cAAcA,YAAU,iBAAiB,EAAE,cAAc,KAAK,CAAC;AAAA,IAC/D,YAAYA,YAAU,eAAe,EAAE,cAAc,KAAK,CAAC;AAAA,EAC7D;AAAA,EACA,CAAC,UAAU;AAAA,IACTC,cAAY,qCAAqC,EAAE,GAAG,MAAM,KAAK;AAAA,IACjEA,cAAY,sCAAsC,EAC/C,GAAG,MAAM,gBAAgB,MAAM,UAAU,MAAM,QAAQ,EACvD,MAAME,OAAM,MAAM,MAAM,+DAA+D;AAAA,IAC1FP,QAAM,qCAAqC,EAAE,GAAG,MAAM,QAAQ,MAAM,SAAS;AAAA,IAC7EA,QAAM,kCAAkC,EAAE,GAAG,MAAM,gBAAgB,MAAM,SAAS;AAAA,EACpF;AACF;AAMO,IAAM,wBAAwBE;AAAA,EACnC;AAAA,EACA;AAAA,IACE,IAAIC,OAAK,IAAI,EACV,WAAW,EACX,QAAQI,uBAAsB;AAAA,IACjC,WAAWJ,OAAK,YAAY,EACzB,QAAQ,EACR,WAAW,MAAM,uBAAuB,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IACtE,MAAMA,OAAK,MAAM,EAAE,QAAQ;AAAA,IAC3B,aAAaC,YAAU,gBAAgB,EAAE,cAAc,KAAK,CAAC,EAAE,QAAQ,EAAE,WAAW;AAAA,IACpF,UAAUH,SAAQ,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA,IACjD,UAAUG,YAAU,aAAa,EAAE,cAAc,KAAK,CAAC;AAAA,IACvD,WAAWD,OAAK,YAAY;AAAA,EAC9B;AAAA,EACA,CAAC,UAAU,CAACH,QAAM,uCAAuC,EAAE,GAAG,MAAM,WAAW,CAAC;AAClF;;;ACvGA;AAAA,EACE,WAAAQ;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC;AAAA,EACA,SAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,eAAAC;AAAA,OACK;AACP,SAAS,OAAAC,YAAW;AACpB,SAAS,sBAAAC,4BAA0B;AACnC,SAAS,KAAAC,UAAS;AAuDX,IAAM,WAAWC;AAAA,EACtB;AAAA,EACA;AAAA,IACE,IAAIC,OAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA;AAAA,IAGvC,OAAOA,OAAK,OAAO,EAAE,QAAQ,EAAE,MAAoB;AAAA,IACnD,SAASA,OAAK,UAAU;AAAA;AAAA;AAAA,IAExB,gBAAgBA,OAAK,iBAAiB,EACnC,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA;AAAA,IAG5D,KAAKA,OAAK,KAAK,EAAE,QAAQ;AAAA;AAAA,IACzB,OAAOC,OAAM,OAAO;AAAA;AAAA,IACpB,WAAWD,OAAK,YAAY,EAAE,MAAwB,EAAE,QAAQ,QAAQ;AAAA;AAAA,IAGxE,WAAWE,SAAQ,WAAW,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA;AAAA,IAGvD,eAAeC,SAAQ,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA;AAAA,IAG5D,aAAaH,OAAK,aAAa;AAAA;AAAA,IAG/B,WAAWA,OAAK,YAAY;AAAA,IAC5B,WAAWA,OAAK,YAAY;AAAA,IAC5B,WAAWI,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,IACxD,WAAWA,YAAU,YAAY,EAC9B,QAAQ,EACR,WAAW,EACX,UAAU,MAAM,oBAAI,KAAK,CAAC;AAAA,EAC/B;AAAA,EACA,CAAC,UAAU;AAAA;AAAA,IAETC,cAAY,qBAAqB,EAAE;AAAA,MACjC,MAAM;AAAA,MACNC,gBAAe,MAAM,OAAO;AAAA,MAC5BA,gBAAe,MAAM,cAAc;AAAA,MACnC,MAAM;AAAA,IACR;AAAA;AAAA,IAEAC,QAAM,wBAAwB,EAAE,GAAG,MAAM,OAAO,MAAM,GAAG;AAAA;AAAA,IAEzDA,QAAM,qBAAqB,EAAE,GAAG,MAAM,cAAc;AAAA;AAAA,IAEpDA,QAAM,qBAAqB,EAAE,GAAG,MAAM,OAAO;AAAA,EAC/C;AACF;AAYO,IAAM,iBAAiBR;AAAA,EAC5B;AAAA,EACA;AAAA,IACE,IAAIC,OAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA;AAAA,IAGvC,YAAYA,OAAK,aAAa,EAAE,QAAQ;AAAA;AAAA,IAGxC,QAAQC,OAAM,QAAQ,EAAE,QAAQ,EAAE,MAA+B;AAAA;AAAA,IAGjE,SAASE,SAAQ,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA;AAAA,IAG/C,cAAcF,OAAM,eAAe;AAAA;AAAA,IAGnC,aAAaD,OAAK,aAAa;AAAA,IAC/B,YAAYE,SAAQ,YAAY,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,IAEzD,WAAWE,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EAC1D;AAAA,EACA,CAAC,UAAU;AAAA;AAAA,IAETC,cAAY,qCAAqC,EAAE;AAAA,MACjD,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAMO,IAAM,qBAAqBG,GAAE,KAAK,CAAC,UAAU,UAAU,iBAAiB,eAAe,CAAC;AACxF,IAAM,yBAAyBA,GAAE,KAAK,CAAC,UAAU,UAAU,WAAW,MAAM,CAAC;AAE7E,IAAM,gBAAgBC,qBAAmB,QAAQ;AACjD,IAAM,sBAAsBA,qBAAmB,cAAc;AAS7D,IAAM,kBAAkB,cAAc,KAAK;AAAA,EAChD,OAAO;AAAA,EACP,KAAK;AAAA,EACL,gBAAgB;AAAA,EAChB,SAAS;AACX,CAAC,EAAE,OAAO;AAAA,EACR,cAAcD,GAAE,QAAQ,EAAE,SAAS;AACrC,CAAC;AAKM,IAAM,oBAAoB,cAC9B,KAAK;AAAA,EACJ,OAAO;AAAA,EACP,gBAAgB;AAAA,EAChB,SAAS;AACX,CAAC,EACA,MAAM,gBAAgB,EACtB,OAAO;AAAA,EACN,WAAWA,GAAE,OAAO,EAAE,SAAS;AACjC,CAAC;AAKI,IAAM,qBAAqB,cAAc,KAAK;AAAA,EACnD,OAAO;AAAA,EACP,KAAK;AAAA,EACL,OAAO;AAAA,EACP,gBAAgB;AAAA,EAChB,SAAS;AAAA,EACT,WAAW;AAAA,EACX,aAAa;AAAA,EACb,WAAW;AACb,CAAC;AAKM,IAAM,wBAAwB,cAAc,KAAK;AAAA,EACtD,OAAO;AAAA,EACP,KAAK;AAAA,EACL,gBAAgB;AAAA,EAChB,SAAS;AACX,CAAC;;;ACnOD;AAAA,EACE,WAAAE;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC;AAAA,EACA,SAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,eAAAC;AAAA,OACK;AACP,SAAS,sBAAAC,4BAA0B;AACnC,SAAS,KAAAC,UAAS;AAsCX,IAAM,eAAeC;AAAA,EAC1B;AAAA,EACA;AAAA,IACE,IAAIC,OAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA;AAAA,IAGvC,KAAKA,OAAK,KAAK,EAAE,QAAQ,EAAE,OAAO;AAAA;AAAA,IAClC,MAAMA,OAAK,MAAM,EAAE,QAAQ;AAAA;AAAA;AAAA,IAG3B,aAAaA,OAAK,aAAa;AAAA,IAC/B,SAASC,SAAQ,SAAS,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA;AAAA,IAGnD,mBAAmBC,SAAQ,oBAAoB,EAAE,QAAQ,EAAE,QAAQ,GAAG;AAAA;AAAA;AAAA,IAGtE,YAAYC,OAAM,YAAY,EAC3B,QAAQ,EACR,QAAQ,CAAC,CAAC,EACV,MAAuB;AAAA;AAAA,IAG1B,WAAWH,OAAK,YAAY;AAAA,IAC5B,WAAWI,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,IACxD,WAAWA,YAAU,YAAY,EAC9B,QAAQ,EACR,WAAW,EACX,UAAU,MAAM,oBAAI,KAAK,CAAC;AAAA,EAC/B;AAAA,EACA,CAAC,UAAU,CAACC,QAAM,uBAAuB,EAAE,GAAG,MAAM,GAAG,CAAC;AAC1D;AAYO,IAAM,uBAAuBN;AAAA,EAClC;AAAA,EACA;AAAA,IACE,IAAIC,OAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA;AAAA,IAGvC,QAAQA,OAAK,SAAS,EACnB,QAAQ,EACR,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA;AAAA,IAE5D,gBAAgBA,OAAK,iBAAiB,EACnC,QAAQ,EACR,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA;AAAA,IAG5D,SAASC,SAAQ,SAAS,EAAE,QAAQ;AAAA,IACpC,mBAAmBC,SAAQ,oBAAoB;AAAA;AAAA,IAC/C,YAAYC,OAAM,YAAY,EAAE,MAAuB;AAAA;AAAA;AAAA,IAGvD,WAAWH,OAAK,YAAY;AAAA,IAC5B,WAAWI,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EAC1D;AAAA,EACA,CAAC,UAAU;AAAA;AAAA,IAETE,cAAY,8BAA8B,EAAE,GAAG,MAAM,QAAQ,MAAM,cAAc;AAAA;AAAA,IAEjFD,QAAM,yBAAyB,EAAE,GAAG,MAAM,cAAc;AAAA,EAC1D;AACF;AAOO,IAAM,sBAAsBE,GAAE,OAAO;AAAA,EAC1C,MAAMA,GAAE,KAAK,CAAC,aAAa,eAAe,WAAW,YAAY,CAAC;AAAA,EAClE,UAAUA,GAAE,KAAK,CAAC,MAAM,OAAO,MAAM,OAAO,MAAM,MAAM,OAAO,KAAK,CAAC;AAAA,EACrE,OAAOA,GAAE,QAAQ;AACnB,CAAC;AAGM,IAAM,oBAAoBC,qBAAmB,YAAY;AACzD,IAAM,4BAA4BA,qBAAmB,oBAAoB;AAOhF,IAAM,0BAA0BD,GAC7B,OAAO;AAAA,EACN,gBAAgBA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAC3C,UAAUA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AACvC,CAAC,EACA,OAAO,CAAC,SAAS,CAAC,EAAE,KAAK,kBAAkB,KAAK,WAAW;AAAA,EAC1D,SAAS;AAAA,EACT,MAAM,CAAC,gBAAgB;AACzB,CAAC,EACA,UAAU,CAAC,UAAU;AAAA,EACpB,gBAAgB,KAAK,kBAAkB,KAAK;AAC9C,EAAE;AAOG,IAAM,wBAAwBA,GAAE,OAAO;AAAA,EAC5C,KAAKA,GAAE,OAAO;AAAA,EACd,gBAAgBA,GAAE,OAAO,EAAE,SAAS;AAAA,EACpC,UAAUA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,QAAQA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,UAAUA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,YAAYA,GAAE,OAAO,EAAE,SAAS;AAClC,CAAC,EAAE,UAAU,CAAC,UAAU;AAAA,EACtB,GAAG;AAAA,EACH,gBAAgB,KAAK,kBAAkB,KAAK;AAC9C,EAAE;AAGK,IAAM,sBAAsBA,GAAE,OAAO;AAAA,EAC1C,KAAKA,GAAE,OAAO,EAAE,IAAI,CAAC;AACvB,CAAC;AAGM,IAAM,wBAAwB,iBAAiB,QAAQ;AAGvD,IAAM,yBAAyBA,GAAE,OAAO;AAAA,EAC7C,gBAAgBA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAC3C,UAAUA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AACvC,CAAC,EACE,OAAO,CAAC,SAAS,CAAC,EAAE,KAAK,kBAAkB,KAAK,WAAW;AAAA,EAC1D,SAAS;AAAA,EACT,MAAM,CAAC,gBAAgB;AACzB,CAAC,EACA,UAAU,CAAC,UAAU;AAAA,EACpB,gBAAgB,KAAK,kBAAkB,KAAK;AAC9C,EAAE;AAOG,IAAM,4BAA4B,kBACtC,KAAK;AAAA,EACJ,IAAI;AAAA,EACJ,WAAW;AAAA,EACX,WAAW;AACb,CAAC,EACA,QAAQ,EACR,OAAO;AAAA,EACN,IAAIA,GAAE,OAAO;AAAA;AACf,CAAC;AAGI,IAAM,4BAA4BA,GAAE,OAAO;AAAA,EAChD,IAAIA,GAAE,OAAO,EAAE,KAAK;AACtB,CAAC;AAGM,IAAM,0BAA0BA,GAAE,OAAO;AAAA,EAC9C,SAASA,GAAE,OAAO;AAAA,EAClB,gBAAgBA,GAAE,OAAO,EAAE,SAAS;AAAA,EACpC,UAAUA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,SAASA,GAAE,QAAQ;AAAA,EACnB,mBAAmBA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EACvD,YAAYA,GAAE,MAAM,mBAAmB,EAAE,SAAS;AACpD,CAAC,EAAE,IAAI,uBAAuB,EAC3B,UAAU,CAAC,UAAU;AAAA,EACpB,SAAS,KAAK;AAAA,EACd,gBAAgB,KAAK;AAAA,EACrB,SAAS,KAAK;AAAA,EACd,mBAAmB,KAAK;AAAA,EACxB,YAAY,KAAK;AACnB,EAAE;AAGG,IAAM,6BAA6BA,GAAE,OAAO;AAAA,EACjD,SAASA,GAAE,OAAO;AAAA,EAClB,gBAAgBA,GAAE,OAAO,EAAE,SAAS;AAAA,EACpC,UAAUA,GAAE,OAAO,EAAE,SAAS;AAChC,CAAC,EAAE,IAAI,uBAAuB,EAC3B,UAAU,CAAC,UAAU;AAAA,EACpB,SAAS,KAAK;AAAA,EACd,gBAAgB,KAAK;AACvB,EAAE;;;AClPJ;AAAA,EACE,WAAAE;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC;AAAA,EACA,WAAAC;AAAA,EACA;AAAA,EACA,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,SAAAC;AAAA,EACA,eAAAC;AAAA,EACA;AAAA,OAEK;AACP,SAAS,OAAAC,YAAW;AACpB,SAAS,sBAAAC,sBAAoB,0BAA0B;AACvD,SAAS,KAAAC,UAAS;AAaX,IAAM,QAAQC;AAAA,EACnB;AAAA,EACA;AAAA,IACE,IAAIC,OAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA,IAEvC,gBAAgBA,OAAK,iBAAiB,EACnC,QAAQ,EACR,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA;AAAA,IAG5D,UAAUA,OAAK,WAAW,EAAE,WAAW,MAAmB,MAAM,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IAC3F,aAAaA,OAAK,cAAc;AAAA;AAAA,IAGhC,UAAUA,OAAK,UAAU,EAAE,QAAQ;AAAA,IACnC,UAAUA,OAAK,WAAW,EAAE,QAAQ;AAAA,IACpC,MAAM,OAAO,QAAQ,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA;AAAA,IAG5D,iBAAiBA,OAAK,kBAAkB,EAAE,QAAQ,EAAE,MAA2B;AAAA,IAC/E,YAAYA,OAAK,aAAa,EAAE,QAAQ;AAAA,IACxC,eAAeA,OAAK,gBAAgB;AAAA;AAAA,IAGpC,WAAWA,OAAK,YAAY;AAAA,IAC5B,UAAUC,UAAQ,WAAW,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA;AAAA,IAGtD,UAAUD,OAAK,UAAU;AAAA;AAAA,IAGzB,OAAOE,SAAQ,OAAO;AAAA,IACtB,QAAQA,SAAQ,QAAQ;AAAA,IACxB,QAAQF,OAAK,QAAQ;AAAA;AAAA,IAGrB,KAAKA,OAAK,KAAK;AAAA,IACf,OAAOA,OAAK,OAAO;AAAA,IACnB,MAAMA,OAAK,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AAAA,IACrC,YAAYA,OAAK,aAAa;AAAA;AAAA,IAG9B,UAAUG,OAAM,UAAU,EAAE,MAA+B,EAAE,QAAQ,CAAC,CAAC;AAAA;AAAA,IAGvE,WAAWH,OAAK,YAAY,EAAE,QAAQ;AAAA,IACtC,WAAWI,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,IACxD,WAAWA,YAAU,YAAY,EAC9B,QAAQ,EACR,WAAW,EACX,UAAU,MAAM,oBAAI,KAAK,CAAC;AAAA,IAC7B,WAAWA,YAAU,YAAY;AAAA,EACnC;AAAA,EACA,CAAC,UAAU;AAAA;AAAA,IAETC,cAAY,sBAAsB,EAAE;AAAA,MAClC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA;AAAA,IAEAA,cAAY,6BAA6B,EACtC,GAAG,MAAM,UAAU,MAAM,WAAW,EACpC,MAAMC,OAAM,MAAM,QAAQ,cAAc;AAAA;AAAA,IAE3C,MAAM,qBAAqBA,OAAM,MAAM,QAAQ,qBAAqB,MAAM,EAAE,EAAE;AAAA;AAAA,IAE9EC,QAAM,sBAAsB,EACzB,GAAG,MAAM,gBAAgB,MAAM,UAAU,EACzC,MAAMD,OAAM,MAAM,SAAS,UAAU;AAAA,IACxCC,QAAM,oBAAoB,EACvB,GAAG,MAAM,gBAAgB,MAAM,QAAQ,EACvC,MAAMD,OAAM,MAAM,SAAS,UAAU;AAAA,IACxCC,QAAM,kBAAkB,EACrB,GAAG,MAAM,QAAQ,EACjB,MAAMD,OAAM,MAAM,QAAQ,cAAc;AAAA,IAC3CC,QAAM,gBAAgB,EACnB,MAAM,OAAO,MAAM,IAAI,EACvB,MAAMD,OAAM,MAAM,SAAS,UAAU;AAAA,IACxCC,QAAM,uBAAuB,EAC1B,GAAG,MAAM,gBAAgB,MAAM,SAAS,EACxC,MAAMD,OAAM,MAAM,SAAS,UAAU;AAAA,IACxCC,QAAM,mBAAmB,EACtB,GAAG,MAAM,SAAS,EAClB,MAAMD,OAAM,MAAM,SAAS,cAAc;AAAA,EAC9C;AACF;AAMO,IAAM,oBAAoBE,qBAAmB,KAAK;AAClD,IAAM,oBAAoB,mBAAmB,KAAK;AAElD,IAAM,6BAA6BC,GAAE,OAAO;AAAA,EACjD,KAAKA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI;AAAA,EACrC,YAAYA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS;AACzD,CAAC;;;ACnID;AAAA,EACE,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC;AAAA,EACA,eAAAC;AAAA,EACA,WAAAC;AAAA,OACK;AACP,SAAS,sBAAAC,sBAAoB,sBAAAC,2BAA0B;AACvD,SAAS,KAAAC,UAAS;AAGX,IAAM,oBAAoB,CAAC,SAAS,aAAa,UAAU;AAE3D,IAAM,sBAAsB,CAAC,WAAW,YAAY,UAAU,UAAU;AAExE,IAAM,kCAAkC;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,IAAM,0BAA0B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,6BAA6B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAIA,SAAS,qBAAqB,OAAuB;AACnD,QAAM,aAAa,MAChB,KAAK,EACL,QAAQ,QAAQ,GAAG,EACnB,QAAQ,QAAQ,GAAG,EACnB,QAAQ,OAAO,EAAE,EACjB,YAAY;AAEf,SAAO,cAAc;AACvB;AAEO,IAAM,WAAWC;AAAA,EACtB;AAAA,EACA;AAAA,IACE,IAAIC,OAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA,IAEvC,gBAAgBA,OAAK,iBAAiB,EACnC,QAAQ,EACR,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IAE5D,OAAOA,OAAK,OAAO,EAAE,QAAQ;AAAA,IAC7B,MAAMA,OAAK,MAAM,EAAE,QAAQ;AAAA,IAC3B,QAAQC,SAAQ,UAAU,EAAE,QAAQ,IAAI,MAAM,kBAAkB,CAAC,EAC9D,QAAQ,EACR,QAAQ,OAAO;AAAA,IAElB,SAASD,OAAK,UAAU;AAAA,IACxB,YAAYA,OAAK,aAAa;AAAA,IAC9B,UAAUA,OAAK,WAAW;AAAA,IAC1B,gBAAgBA,OAAK,iBAAiB;AAAA,IAEtC,UAAUE,QAAM,UAAU,EACvB,QAAQ,EACR,QAAQ,CAAC,CAAC,EACV,MAAyB;AAAA,IAC5B,mBAAmBA,QAAM,oBAAoB,EAAE,MAAgC;AAAA,IAC/E,aAAaC,YAAU,cAAc;AAAA,IAErC,WAAWH,OAAK,YAAY;AAAA,IAC5B,WAAWA,OAAK,YAAY;AAAA,IAC5B,WAAWG,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,IACxD,WAAWA,YAAU,YAAY,EAC9B,QAAQ,EACR,WAAW,EACX,UAAU,MAAM,oBAAI,KAAK,CAAC;AAAA,EAC/B;AAAA,EACA,CAAC,UAAU;AAAA,IACTC,cAAY,yBAAyB,EAAE,GAAG,MAAM,gBAAgB,MAAM,IAAI;AAAA,IAC1EC,QAAM,0BAA0B,EAAE,GAAG,MAAM,gBAAgB,MAAM,MAAM;AAAA,IACvEA,QAAM,qBAAqB,EAAE,GAAG,MAAM,OAAO;AAAA,EAC/C;AACF;AAEO,IAAM,aAAaN;AAAA,EACxB;AAAA,EACA;AAAA,IACE,IAAIC,OAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA,IAEvC,gBAAgBA,OAAK,iBAAiB,EACnC,QAAQ,EACR,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IAE5D,UAAUA,OAAK,UAAU,EAAE,QAAQ;AAAA,IACnC,QAAQC,SAAQ,UAAU,EAAE,QAAQ,IAAI,MAAM,oBAAoB,CAAC,EAChE,QAAQ,EACR,QAAQ,SAAS;AAAA,IACpB,WAAWK,UAAQ,YAAY,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,IACxD,mBAAmBN,OAAK,oBAAoB;AAAA,IAC5C,mBAAmBC,SAAQ,sBAAsB,EAAE,QAAQ,IAAI,MAAM,gCAAgC,CAAC,EACnG,QAAQ,EACR,QAAQ,eAAe;AAAA,IAC1B,wBAAwBE,YAAU,0BAA0B;AAAA,IAC5D,qBAAqBA,YAAU,uBAAuB;AAAA,IACtD,kBAAkBH,OAAK,mBAAmB;AAAA,IAC1C,qBAAqBE,QAAM,sBAAsB,EAAE,MAAsC;AAAA,IACzF,eAAeC,YAAU,iBAAiB;AAAA,IAC1C,YAAYA,YAAU,aAAa;AAAA,IACnC,WAAWA,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,IACxD,WAAWA,YAAU,YAAY,EAC9B,QAAQ,EACR,WAAW,EACX,UAAU,MAAM,oBAAI,KAAK,CAAC;AAAA,EAC/B;AAAA,EACA,CAAC,UAAU;AAAA,IACTC,cAAY,2BAA2B,EAAE,GAAG,MAAM,QAAQ;AAAA,IAC1DC,QAAM,qBAAqB,EAAE,GAAG,MAAM,cAAc;AAAA,IACpDA,QAAM,wBAAwB,EAAE,GAAG,MAAM,MAAM;AAAA,EACjD;AACF;AAEO,IAAM,gBAAgBE,qBAAmB,QAAQ;AACjD,IAAM,sBAAsBC,oBAAmB,QAAQ;AACvD,IAAM,kBAAkBD,qBAAmB,UAAU;AACrD,IAAM,wBAAwBC,oBAAmB,UAAU;AAElE,SAAS,2BAA2B,OAAuB;AACzD,SAAO,MAAM,KAAK,EAAE,YAAY,EAAE,QAAQ,OAAO,EAAE;AACrD;AAEA,SAAS,yBAAyB,OAAwB;AACxD,MAAI,MAAM,SAAS,IAAK,QAAO;AAC/B,MAAI,MAAM,SAAS,GAAG,KAAK,MAAM,SAAS,IAAI,KAAK,MAAM,SAAS,GAAG,EAAG,QAAO;AAC/E,MAAI,UAAU,eAAe,MAAM,SAAS,YAAY,EAAG,QAAO;AAClE,MAAI,0BAA0B,KAAK,KAAK,EAAG,QAAO;AAElD,QAAM,SAAS,MAAM,MAAM,GAAG;AAC9B,MAAI,OAAO,SAAS,EAAG,QAAO;AAE9B,SAAO,OAAO,MAAM,CAAC,UACnB,MAAM,SAAS,KACZ,MAAM,UAAU,MAChB,oCAAoC,KAAK,KAAK,CAClD;AACH;AAEO,IAAM,0BAA0BC,GACpC,OAAO,EACP,KAAK,EACL,IAAI,GAAG,sBAAsB,EAC7B,IAAI,KAAK,yCAAyC,EAClD,UAAU,0BAA0B,EACpC,OAAO,CAAC,aAAa,CAAC,2BAA2B,KAAK,QAAQ,GAAG;AAAA,EAChE,SAAS;AACX,CAAC,EACA,OAAO,0BAA0B;AAAA,EAChC,SAAS;AACX,CAAC;AAEI,IAAM,oBAAoBA,GAC9B,OAAO,EACP,KAAK,EACL,IAAI,GAAG,kBAAkB,EACzB,IAAI,KAAK,qCAAqC,EAC9C,UAAU,oBAAoB,EAC9B,OAAO,CAAC,SAAS,CAAC,wBAAwB,SAAS,IAAgD,GAAG;AAAA,EACrG,SAAS;AACX,CAAC,EACA,OAAO,CAAC,SAAS,CAAC,2BAA2B,KAAK,CAAC,WAAW,SAAS,UAAU,KAAK,WAAW,GAAG,MAAM,GAAG,CAAC,GAAG;AAAA,EAChH,SAAS;AACX,CAAC,EACA,OAAO,CAAC,SAAS,SAAS,OAAO,2BAA2B,KAAK,IAAI,GAAG;AAAA,EACvE,SAAS;AACX,CAAC,EACA,OAAO,CAAC,SAAS,CAAC,KAAK,MAAM,GAAG,EAAE,KAAK,CAAC,YAAY,YAAY,OAAO,YAAY,IAAI,GAAG;AAAA,EACzF,SAAS;AACX,CAAC;AACI,IAAM,0BAA0BA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,QAAQ,CAAC;AAEhE,IAAM,wBAAwB,cAClC,KAAK;AAAA,EACJ,OAAO;AAAA,EACP,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,gBAAgB;AAClB,CAAC,EACA,OAAO;AAAA,EACN,MAAM;AACR,CAAC;AAEI,IAAM,wBAAwB,sBAAsB,QAAQ;AAE5D,IAAM,0BAA0B,oBAAoB,KAAK;AAAA,EAC9D,IAAI;AACN,CAAC;AAEM,IAAM,8BAA8B,wBAAwB,OAAO;AAAA,EACxE,UAAU;AACZ,CAAC;AAEM,IAAM,yBAAyB;AAE/B,IAAM,0BAA0B,gBACpC,KAAK;AAAA,EACJ,UAAU;AACZ,CAAC,EACA,OAAO;AAAA,EACN,UAAU;AACZ,CAAC;AAEI,IAAM,oBAAoB,sBAAsB,KAAK;AAAA,EAC1D,IAAI;AACN,CAAC;AAEM,IAAM,0BAA0B;AAChC,IAAM,sCAAsC;AAE5C,IAAM,2CAA2C,kBAAkB,OAAO;AAAA,EAC/E,QAAQA,GAAE,KAAK,+BAA+B;AAAA,EAC9C,OAAOA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,GAAI,EAAE,SAAS;AAC9C,CAAC;AAEM,IAAM,8BAA8B;AACpC,IAAM,2BAA2B;AACjC,IAAM,0BAA0B;;;ACpPvC,SAAS,OAAAC,YAAW;AACpB;AAAA,EACE,SAAAC;AAAA,EACA;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC;AAAA,EACA,eAAAC;AAAA,EACA,WAAAC;AAAA,OACK;AACP,SAAS,sBAAAC,sBAAoB,sBAAAC,2BAA0B;AACvD,SAAS,KAAAC,WAAS;AAIX,IAAM,8BAA8B;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,IAAM,+BAA+B,CAAC,UAAU,WAAW;AA2B3D,IAAM,oBAAoBC;AAAA,EAC/B;AAAA,EACA;AAAA,IACE,IAAIC,OAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA,IACvC,gBAAgBA,OAAK,iBAAiB,EACnC,QAAQ,EACR,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IAC5D,UAAUC,SAAQ,aAAa,EAAE,QAAQ,IAAI,CAAC,EAAE,QAAQ;AAAA,IACxD,eAAeA,SAAQ,kBAAkB,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ;AAAA,IACjE,UAAUC,SAAQ,UAAU,EAAE,QAAQ;AAAA,IACtC,QAAQD,SAAQ,UAAU,EAAE,QAAQ,IAAI,MAAM,4BAA4B,CAAC,EACxE,QAAQ,EACR,MAA8B,EAC9B,QAAQ,OAAO;AAAA,IAClB,SAASC,SAAQ,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA,IAC/C,YAAYC,QAAM,aAAa,EAC5B,QAAQ,EACR,MAA0B,EAC1B,QAAQ,EAAE,MAAM,UAAU,CAAC;AAAA,IAC9B,UAAUA,QAAM,UAAU,EAAE,QAAQ,EAAE,MAA0B,EAAE,QAAQ,CAAC,CAAC;AAAA,IAC5E,gBAAgBA,QAAM,iBAAiB,EAAE,QAAQ,EAAE,MAA0B,EAAE,QAAQ,CAAC,CAAC;AAAA,IACzF,eAAeA,QAAM,gBAAgB,EAAE,QAAQ,EAAE,MAA6B,EAAE,QAAQ,CAAC,CAAC;AAAA,IAC1F,aAAaA,QAAM,cAAc,EAAE,QAAQ,EAAE,MAA0B,EAAE,QAAQ,CAAC,CAAC;AAAA,IACnF,gBAAgBA,QAAM,iBAAiB,EACpC,QAAQ,EACR,MAA8B,EAC9B,QAAQ,CAAC,CAAC;AAAA,IACb,uBAAuBA,QAAM,wBAAwB,EAClD,MAA4C;AAAA,IAC/C,WAAWH,OAAK,YAAY,EAAE,QAAQ;AAAA,IACtC,WAAWA,OAAK,YAAY,EAAE,QAAQ;AAAA,IACtC,aAAaA,OAAK,cAAc;AAAA,IAChC,WAAWI,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,IACxD,WAAWA,YAAU,YAAY,EAC9B,QAAQ,EACR,WAAW,EACX,UAAU,MAAM,oBAAI,KAAK,CAAC;AAAA,IAC7B,aAAaA,YAAU,cAAc;AAAA,EACvC;AAAA,EACA,CAAC,UAAU;AAAA,IACTC,cAAY,8CAA8C,EAAE;AAAA,MAC1D,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,IACAA,cAAY,iCAAiC,EAAE,GAAG,MAAM,gBAAgB,MAAM,EAAE;AAAA,IAChFA,cAAY,oCAAoC,EAC7C,GAAG,MAAM,gBAAgB,MAAM,QAAQ,EACvC,MAAMC,OAAM,MAAM,MAAM,YAAY;AAAA,IACvCC,QAAM,4CAA4C,EAAE;AAAA,MAClD,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,IACAA,QAAM,oCAAoC,EAAE,GAAG,MAAM,gBAAgB,MAAM,MAAM;AAAA,EACnF;AACF;AAEO,IAAM,qBAAqBR;AAAA,EAChC;AAAA,EACA;AAAA,IACE,gBAAgBC,OAAK,iBAAiB,EACnC,WAAW,EACX,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IAC5D,kBAAkBA,OAAK,oBAAoB;AAAA,IAC3C,oBAAoBA,OAAK,sBAAsB;AAAA,IAC/C,+BAA+BA,OAAK,mCAAmC;AAAA,IACvE,QAAQC,SAAQ,UAAU,EAAE,QAAQ,IAAI,MAAM,6BAA6B,CAAC,EACzE,QAAQ,EACR,MAA+B,EAC/B,QAAQ,QAAQ;AAAA,IACnB,SAASC,SAAQ,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA,IAC/C,aAAaC,QAAM,aAAa,EAAE,QAAQ,EAAE,MAAiB,EAAE,QAAQ,CAAC,CAAC;AAAA,IACzE,gBAAgBH,OAAK,kBAAkB;AAAA,IACvC,mBAAmBI,YAAU,sBAAsB;AAAA,IACnD,WAAWJ,OAAK,YAAY,EAAE,QAAQ;AAAA,IACtC,WAAWI,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,IACxD,WAAWA,YAAU,YAAY,EAC9B,QAAQ,EACR,WAAW,EACX,UAAU,MAAM,oBAAI,KAAK,CAAC;AAAA,EAC/B;AAAA,EACA,CAAC,UAAU;AAAA,IACT,WAAW;AAAA,MACT,MAAM;AAAA,MACN,SAAS,CAAC,MAAM,gBAAgB,MAAM,gBAAgB;AAAA,MACtD,gBAAgB,CAAC,kBAAkB,gBAAgB,kBAAkB,EAAE;AAAA,IACzE,CAAC,EAAE,SAAS,UAAU;AAAA,IACtB,WAAW;AAAA,MACT,MAAM;AAAA,MACN,SAAS,CAAC,MAAM,gBAAgB,MAAM,kBAAkB;AAAA,MACxD,gBAAgB,CAAC,kBAAkB,gBAAgB,kBAAkB,EAAE;AAAA,IACzE,CAAC,EAAE,SAAS,UAAU;AAAA,IACtB,WAAW;AAAA,MACT,MAAM;AAAA,MACN,SAAS,CAAC,MAAM,gBAAgB,MAAM,6BAA6B;AAAA,MACnE,gBAAgB,CAAC,kBAAkB,gBAAgB,kBAAkB,EAAE;AAAA,IACzE,CAAC,EAAE,SAAS,UAAU;AAAA,IACtBI;AAAA,MACE;AAAA,MACAF,OAAM,MAAM,gBAAgB,eAAe,MAAM,kBAAkB,eAAe,MAAM,gBAAgB,OAAO,MAAM,kBAAkB;AAAA,IACzI;AAAA,IACAC,QAAM,0CAA0C,EAAE,GAAG,MAAM,gBAAgB;AAAA,IAC3EA,QAAM,iCAAiC,EAAE,GAAG,MAAM,MAAM;AAAA,EAC1D;AACF;AAEA,IAAM,yBAAyBE,IAC5B,OAAO,EACP,IAAI,CAAC,EACL,IAAI,GAAG,EACP,MAAM,uCAAuC;AAEzC,IAAM,2BAA0DA,IAAE,mBAAmB,QAAQ;AAAA,EAClGA,IAAE,OAAO,EAAE,MAAMA,IAAE,QAAQ,aAAa,GAAG,SAASA,IAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC;AAAA,EAChFA,IAAE,OAAO;AAAA,IACP,MAAMA,IAAE,QAAQ,cAAc;AAAA,IAC9B,UAAU;AAAA,IACV,SAASA,IAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EACpC,CAAC;AAAA,EACDA,IAAE,OAAO,EAAE,MAAMA,IAAE,QAAQ,eAAe,GAAG,QAAQA,IAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC;AAAA,EACjFA,IAAE,OAAO,EAAE,MAAMA,IAAE,QAAQ,SAAS,EAAE,CAAC;AACzC,CAAC;AAED,IAAM,2BAA2BA,IAAE,OAAOA,IAAE,OAAO,GAAGA,IAAE,KAAK,CAAC;AACvD,IAAM,iCAAiCA,IAAE,OAAO;AAAA,EACrD,eAAe;AAAA,EACf,WAAWA,IAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,MAAM,wBAAwB;AAAA,EACpE,QAAQA,IAAE,KAAK,CAAC,SAAS,UAAU,OAAO,CAAC;AAAA,EAC3C,kBAAkB,uBAAuB,SAAS;AACpD,CAAC,EAAE,YAAY,CAAC,WAAW,QAAQ;AACjC,MAAI,UAAU,WAAW,YAAY,CAAC,UAAU,kBAAkB;AAChE,QAAI,SAAS;AAAA,MACX,MAAM;AAAA,MACN,MAAM,CAAC,kBAAkB;AAAA,MACzB,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACA,MAAI,UAAU,WAAW,YAAY,UAAU,kBAAkB;AAC/D,QAAI,SAAS;AAAA,MACX,MAAM;AAAA,MACN,MAAM,CAAC,kBAAkB;AAAA,MACzB,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF,CAAC;AAEM,IAAM,8BAAgEA,IAAE,OAAO;AAAA,EACpF,YAAYA,IAAE,MAAM,8BAA8B,EAAE,SAAS;AAAA,EAC7D,WAAWA,IAAE,OAAO,wBAAwB,wBAAwB,EAAE,SAAS;AACjF,CAAC,EAAE,YAAY,CAAC,QAAQ,QAAQ;AAC9B,QAAM,UAAU,oBAAI,IAAY;AAChC,aAAW,CAACF,SAAO,SAAS,MAAM,OAAO,cAAc,CAAC,GAAG,QAAQ,GAAG;AACpE,UAAM,MAAM,GAAG,UAAU,aAAa,IAAI,UAAU,SAAS;AAC7D,QAAI,QAAQ,IAAI,GAAG,GAAG;AACpB,UAAI,SAAS;AAAA,QACX,MAAM;AAAA,QACN,MAAM,CAAC,cAAcA,SAAO,WAAW;AAAA,QACvC,SAAS,uCAAuC,GAAG;AAAA,MACrD,CAAC;AAAA,IACH;AACA,YAAQ,IAAI,GAAG;AAAA,EACjB;AACF,CAAC;AAEM,IAAM,yBAAyBG,qBAAmB,mBAAmB;AAAA,EAC1E,YAAY,MAAM;AAAA,EAClB,UAAU,MAAM;AAAA,EAChB,gBAAgB,MAAM;AAAA,EACtB,eAAe,MAAM;AAAA,EACrB,aAAa,MAAM;AAAA,EACnB,gBAAgB,MAAMD,IAAE,OAAOA,IAAE,OAAO,GAAGA,IAAE,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC;AAC3E,CAAC;AACM,IAAM,+BAA+BE,oBAAmB,iBAAiB;AACzE,IAAM,0BAA0BD,qBAAmB,kBAAkB;AACrE,IAAM,gCAAgCC,oBAAmB,kBAAkB;AAE3E,IAAM,mBAAmBF,IAAE,OAAO,EAAE,UAAU,uBAAuB,CAAC;AACtE,IAAM,6BAA6B,iBAAiB,OAAO,EAAE,SAASA,IAAE,QAAQ,EAAE,CAAC;AACnF,IAAM,2BAA2B,6BAA6B,KAAK,EAAE,IAAI,KAAK,CAAC;AAC/E,IAAM,6BAA6B,iBAAiB,MAAM,gBAAgB;AAC1E,IAAM,4BAA4B,iBAAiB,OAAO;AAAA,EAC/D,iBAAiBA,IAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EACtD,YAAY,yBAAyB,SAAS;AAAA,EAC9C,UAAU,yBAAyB,SAAS;AAAA,EAC5C,gBAAgB,yBAAyB,SAAS;AAAA,EAClD,eAAe,4BAA4B,SAAS;AAAA,EACpD,aAAa,yBAAyB,SAAS;AACjD,CAAC;AACM,IAAM,2BAA2B,iBAAiB,OAAO;AAAA,EAC9D,0BAA0BA,IAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AACjE,CAAC;AACM,IAAM,mCAAmC,yBAAyB,OAAO;AAAA,EAC9E,0BAA0BA,IAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AACjE,CAAC;AACM,IAAM,+BAA+B,yBAAyB,OAAO;AAAA,EAC1E,sBAAsBA,IAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EAChD,0BAA0BA,IAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AACjE,CAAC;AACM,IAAM,mCAAmC,yBAAyB,OAAO;AAAA,EAC9E,0BAA0BA,IAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AACtD,CAAC;AACM,IAAM,+BAA+B,yBAAyB,OAAO;AAAA,EAC1E,MAAMA,IAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EACtC,QAAQA,IAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EAC5C,kBAAkBA,IAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,GAAG,EAAE,SAAS;AAC/D,CAAC;AACM,IAAM,0BAA0BA,IAAE,OAAO;AAAA,EAC9C,0BAA0BA,IAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACpD,YAAYA,IAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AACzC,CAAC;;;AC1QD;AAAA,EACE,WAAAG;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,SAAAC;AAAA,OACK;AACP,SAAS,sBAAAC,4BAA0B;AAsB5B,IAAM,uBAAuB;AAAA;AAAA,EAElC,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,cAAc;AAAA;AAAA,EAGd,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,WAAW;AAAA;AAAA,EAGX,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,eAAe;AACjB;AAgEO,IAAM,gBAAgBC;AAAA,EAC3B;AAAA,EACA;AAAA,IACE,IAAIC,OAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA;AAAA,IAGvC,QAAQA,OAAK,SAAS,EACnB,QAAQ,EACR,WAAW,MAAM,KAAK,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA;AAAA,IAEpD,gBAAgBA,OAAK,iBAAiB,EACnC,QAAQ,EACR,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA;AAAA,IAG5D,SAASA,OAAK,UAAU;AAAA,IACxB,UAAUA,OAAK,WAAW;AAAA,IAC1B,YAAYA,OAAK,aAAa;AAAA;AAAA,IAG9B,aAAaA,OAAK,cAAc;AAAA,IAChC,mBAAmBC,QAAM,oBAAoB,EAAE,MAA+B;AAAA;AAAA,IAG9E,MAAMD,OAAK,MAAM,EAAE,QAAQ,EAAE,MAAwB;AAAA,IACrD,OAAOA,OAAK,OAAO,EAAE,QAAQ;AAAA,IAC7B,SAASA,OAAK,SAAS,EAAE,QAAQ;AAAA,IACjC,MAAMA,OAAK,MAAM;AAAA;AAAA,IAGjB,MAAME,UAAQ,MAAM,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,IAC7C,UAAUA,UAAQ,UAAU,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA;AAAA,IAGrD,cAAcD,QAAM,eAAe,EAAE,MAAgB;AAAA,IACrD,gBAAgBA,QAAM,iBAAiB,EAAE,MAAgB;AAAA,IACzD,WAAWC,UAAQ,YAAY,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,IACxD,aAAaC,YAAU,eAAe;AAAA;AAAA,IAGtC,UAAUH,OAAK,WAAW;AAAA,IAC1B,YAAYI,UAAQ,aAAa,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA;AAAA,IAGtD,gBAAgBJ,OAAK,iBAAiB,EAAE,OAAO;AAAA;AAAA,IAG/C,gBAAgBA,OAAK,kBAAkB;AAAA;AAAA,IAGvC,UAAUA,OAAK,UAAU,EAAE,QAAQ,EAAE,QAAQ,QAAQ,EAAE,MAA4B;AAAA;AAAA,IAGnF,QAAQA,OAAK,QAAQ,EAAE,QAAQ,EAAE,QAAQ,QAAQ,EAAE,MAA0B;AAAA;AAAA,IAG7E,UAAUA,OAAK,UAAU,EAAE,QAAQ,EAAE,QAAQ,QAAQ,EAAE,MAA4B;AAAA;AAAA,IAGnF,cAAcC,QAAM,eAAe,EAAE,MAA2B,EAAE,QAAQ,CAAC,CAAC;AAAA;AAAA,IAG5E,QAAQC,UAAQ,QAAQ,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA;AAAA,IAGjD,gBAAgBF,OAAK,iBAAiB,EAAE,QAAQ,EAAE,QAAQ,QAAQ,EAAE,MAAsB;AAAA;AAAA,IAG1F,OAAOC,QAAM,OAAO,EAAE,MAAyB;AAAA;AAAA,IAG/C,QAAQA,QAAM,QAAQ,EAAE,MAA0B;AAAA;AAAA,IAGlD,qBAAqBD,OAAK,sBAAsB,EAC7C,QAAQ,EACR,QAAQ,MAAM,EACd,MAA2B;AAAA;AAAA,IAG9B,UAAUC,QAAM,UAAU,EAAE,MAGzB;AAAA;AAAA,IAGH,WAAWE,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,IACxD,WAAWA,YAAU,YAAY;AAAA,EACnC;AAAA,EACA,CAAC,UAAU;AAAA,IACTE,QAAM,6BAA6B,EAAE,GAAG,MAAM,QAAQ,MAAM,IAAI;AAAA,IAChEA,QAAM,4BAA4B,EAAE,GAAG,MAAM,WAAW;AAAA,IACxDA,QAAM,yBAAyB,EAAE,GAAG,MAAM,QAAQ;AAAA,IAClDA,QAAM,2BAA2B,EAAE,GAAG,MAAM,SAAS;AAAA,IACrDA,QAAM,+BAA+B,EAAE,GAAG,MAAM,gBAAgB,MAAM,MAAM;AAAA,IAC5EA,QAAM,4BAA4B,EAAE,GAAG,MAAM,QAAQ;AAAA,IACrDA,QAAM,0BAA0B,EAAE,GAAG,MAAM,MAAM;AAAA,IACjDA,QAAM,0BAA0B,EAAE,GAAG,MAAM,MAAM;AAAA,IACjDA,QAAM,2BAA2B,EAAE,GAAG,MAAM,UAAU,MAAM,MAAM,MAAM,SAAS;AAAA,EACnF;AACF;AAMO,IAAM,qBAAqBC,qBAAmB,aAAa;;;AC5NlE;AAAA,EACE,WAAAC;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,SAAAC;AAAA,OACK;AACP,SAAS,sBAAAC,4BAA0B;AA0B5B,IAAM,wBAAwBP;AAAA,EACnC;AAAA,EACA;AAAA,IACE,IAAIC,OAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA;AAAA,IAGvC,KAAKA,OAAK,KAAK,EAAE,QAAQ,EAAE,OAAO;AAAA;AAAA,IAGlC,MAAMA,OAAK,MAAM,EAAE,QAAQ;AAAA,IAC3B,aAAaA,OAAK,aAAa;AAAA;AAAA,IAG/B,UAAUA,OAAK,UAAU,EAAE,QAAQ,EAAE,MAAwB;AAAA;AAAA,IAG7D,OAAOE,QAAM,OAAO,EAAE,QAAQ,EAAE,MAAgB;AAAA,IAChD,SAASA,QAAM,SAAS,EAAE,QAAQ,EAAE,MAAgB;AAAA;AAAA,IAGpD,WAAWA,QAAM,WAAW,EAAE,MAAgB;AAAA;AAAA,IAG9C,iBAAiBA,QAAM,kBAAkB,EACtC,QAAQ,EACR,QAAQ,CAAC,QAAQ,CAAC,EAClB,MAAgB;AAAA;AAAA,IAGnB,UAAUF,OAAK,UAAU,EAAE,QAAQ,EAAE,QAAQ,QAAQ,EAAE,MAA4B;AAAA;AAAA,IAGnF,UAAUA,OAAK,WAAW;AAAA;AAAA,IAG1B,YAAYG,UAAQ,YAAY,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,IACzD,SAASC,UAAQ,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA;AAAA,IAG/C,WAAWH,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,IACxD,WAAWA,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EAC1D;AAAA,EACA,CAAC,UAAU;AAAA,IACTI,QAAM,sBAAsB,EAAE,GAAG,MAAM,QAAQ;AAAA,IAC/CA,QAAM,wBAAwB,EAAE,GAAG,MAAM,QAAQ;AAAA,EACnD;AACF;AAMO,IAAM,6BAA6BC,qBAAmB,qBAAqB;;;ACzFlF;AAAA,EACE,WAAAC;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA,SAAAC;AAAA,OACK;AACP,SAAS,sBAAAC,4BAA0B;AAY5B,IAAM,uBAAuBN;AAAA,EAClC;AAAA,EACA;AAAA,IACE,IAAIC,OAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA;AAAA;AAAA,IAIvC,KAAKA,OAAK,KAAK,EAAE,QAAQ,EAAE,OAAO;AAAA;AAAA,IAGlC,MAAME,QAAM,MAAM,EAAE,QAAQ,EAAE,MAAgB;AAAA;AAAA,IAG9C,aAAaA,QAAM,aAAa,EAAE,MAAgB;AAAA;AAAA,IAGlD,MAAMF,OAAK,MAAM;AAAA;AAAA,IAGjB,UAAUA,OAAK,WAAW,EAAE,QAAQ;AAAA;AAAA,IAGpC,SAASG,UAAQ,SAAS,EAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA;AAAA,IAGlD,cAAcD,QAAM,eAAe;AAAA;AAAA,IAGnC,WAAWD,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EAC1D;AAAA,EACA,CAAC,UAAU;AAAA,IACTG,QAAM,qBAAqB,EAAE,GAAG,MAAM,QAAQ;AAAA,IAC9CA,QAAM,sBAAsB,EAAE,GAAG,MAAM,OAAO;AAAA,EAChD;AACF;AAMO,IAAM,4BAA4BC,qBAAmB,oBAAoB;;;AC9DhF;AAAA,EACE,WAAAC;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC;AAAA,EACA,SAAAC;AAAA,EACA,eAAAC;AAAA,OACK;AACP,SAAS,sBAAAC,4BAA0B;AA+B5B,IAAM,0BAA0BC;AAAA,EACrC;AAAA,EACA;AAAA,IACE,IAAIC,OAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA;AAAA,IAGvC,QAAQA,OAAK,SAAS,EACnB,QAAQ,EACR,WAAW,MAAM,KAAK,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA;AAAA,IAEpD,gBAAgBA,OAAK,iBAAiB,EACnC,QAAQ,EACR,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA;AAAA,IAG5D,iBAAiBC,QAAM,kBAAkB,EACtC,QAAQ,EACR,QAAQ,CAAC,QAAQ,CAAC,EAClB,MAAgB;AAAA;AAAA;AAAA,IAInB,mBAAmBA,QAAM,oBAAoB,EAAE,MAE7C;AAAA;AAAA,IAGF,YAAYA,QAAM,aAAa,EAAE,MAAwB;AAAA;AAAA,IAGzD,gBAAgBD,OAAK,iBAAiB,EACnC,QAAQ,EACR,QAAQ,SAAS,EACjB,MAAsB;AAAA;AAAA,IAGzB,WAAWE,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,IACxD,WAAWA,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EAC1D;AAAA,EACA,CAAC,UAAU;AAAA,IACTC,cAAY,6BAA6B,EAAE;AAAA,MACzC,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAMO,IAAM,+BAA+BC,qBAAmB,uBAAuB;;;ACzFtF,SAAS,WAAAC,WAAS,QAAAC,QAAM,aAAAC,aAAW,SAAAC,SAAO,SAAAC,eAAa;AACvD,SAAS,sBAAAC,4BAA0B;AA6B5B,IAAM,YAAYC;AAAA,EACvB;AAAA,EACA;AAAA,IACE,IAAIC,OAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA;AAAA,IAGvC,WAAWA,OAAK,YAAY,EAAE,QAAQ,EAAE,MAAiB;AAAA,IACzD,SAASA,OAAK,UAAU,EAAE,QAAQ;AAAA;AAAA,IAGlC,gBAAgBA,OAAK,iBAAiB,EACnC,QAAQ,EACR,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA;AAAA,IAG5D,QAAQA,OAAK,QAAQ,EAAE,QAAQ;AAAA,IAC/B,UAAUA,OAAK,UAAU;AAAA;AAAA,IAGzB,QAAQA,OAAK,QAAQ,EAAE,QAAQ,EAAE,MAAmB;AAAA,IACpD,QAAQA,OAAK,QAAQ;AAAA;AAAA,IAGrB,UAAUC,QAAM,UAAU;AAAA;AAAA,IAG1B,SAASD,OAAK,UAAU;AAAA,IACxB,WAAWA,OAAK,YAAY;AAAA,IAC5B,SAASA,OAAK,UAAU;AAAA,IAExB,WAAWE,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EAC1D;AAAA,EACA,CAAC,UAAU;AAAA,IACTC,QAAM,6BAA6B,EAAE,GAAG,MAAM,cAAc;AAAA,IAC5DA,QAAM,sBAAsB,EAAE,GAAG,MAAM,WAAW,MAAM,OAAO;AAAA,IAC/DA,QAAM,uBAAuB,EAAE,GAAG,MAAM,MAAM;AAAA,IAC9CA,QAAM,2BAA2B,EAAE,GAAG,MAAM,SAAS;AAAA,IACrDA,QAAM,sBAAsB,EAAE,GAAG,MAAM,OAAO;AAAA,EAChD;AACF;AAMO,IAAM,iBAAiBC,qBAAmB,SAAS;;;AC7E1D,SAAS,WAAAC,WAAS,QAAAC,QAAM,aAAAC,aAAW,SAAAC,SAAO,SAAAC,eAAa;AACvD,SAAS,sBAAAC,4BAA0B;AAuD5B,IAAM,cAAcC;AAAA,EACzB;AAAA,EACA;AAAA,IACE,IAAIC,OAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA;AAAA,IAGvC,YAAYA,OAAK,aAAa,EAAE,QAAQ;AAAA;AAAA,IACxC,UAAUA,OAAK,WAAW;AAAA;AAAA;AAAA,IAG1B,gBAAgBA,OAAK,iBAAiB,EACnC,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA;AAAA,IAG5D,QAAQA,OAAK,QAAQ,EAAE,QAAQ;AAAA;AAAA;AAAA,IAG/B,SAASC,QAAM,SAAS,EAAE,MAAoB;AAAA;AAAA,IAC9C,UAAUA,QAAM,UAAU,EAAE,MAA+B;AAAA;AAAA;AAAA,IAG3D,SAASD,OAAK,UAAU,EAAE,QAAQ;AAAA,IAClC,WAAWA,OAAK,YAAY,EAAE,QAAQ,EAAE,MAA2B,EAAE,QAAQ,MAAM;AAAA,IACnF,SAASA,OAAK,UAAU;AAAA,IACxB,WAAWA,OAAK,YAAY;AAAA;AAAA,IAG5B,WAAWA,OAAK,YAAY;AAAA;AAAA,IAC5B,WAAWA,OAAK,YAAY;AAAA,IAC5B,SAASA,OAAK,UAAU;AAAA;AAAA;AAAA,IAGxB,WAAWE,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EAC1D;AAAA,EACA,CAAC,UAAU;AAAA;AAAA,IAETC,QAAM,yBAAyB,EAAE,GAAG,MAAM,YAAY,MAAM,QAAQ;AAAA;AAAA,IAEpEA,QAAM,+BAA+B,EAAE,GAAG,MAAM,cAAc;AAAA;AAAA,IAE9DA,QAAM,wBAAwB,EAAE,GAAG,MAAM,OAAO;AAAA;AAAA,IAEhDA,QAAM,uBAAuB,EAAE,GAAG,MAAM,SAAS;AAAA;AAAA,IAEjDA,QAAM,yBAAyB,EAAE,GAAG,MAAM,YAAY,MAAM,MAAM;AAAA;AAAA,IAElEA,QAAM,wBAAwB,EAAE,GAAG,MAAM,OAAO;AAAA,EAClD;AACF;AAMO,IAAM,mBAAmBC,qBAAmB,WAAW;;;AClH9D,SAAS,WAAAC,WAAS,QAAAC,QAAM,aAAAC,aAAW,SAAAC,SAAO,SAAAC,eAAa;AACvD,SAAS,sBAAAC,4BAA0B;AAoB5B,IAAM,qBAAqBC;AAAA,EAChC;AAAA,EACA;AAAA,IACE,IAAIC,OAAK,IAAI,EAAE,WAAW;AAAA;AAAA,IAG1B,YAAYA,OAAK,aAAa,EAAE,QAAQ;AAAA,IACxC,UAAUA,OAAK,WAAW;AAAA;AAAA,IAG1B,gBAAgBA,OAAK,iBAAiB,EACnC,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,WAAW,CAAC;AAAA;AAAA,IAG7D,QAAQA,OAAK,QAAQ,EAAE,QAAQ;AAAA;AAAA,IAG/B,SAASC,QAAM,SAAS,EAAE,MAAoB;AAAA,IAC9C,UAAUA,QAAM,UAAU,EAAE,MAA+B;AAAA;AAAA,IAG3D,SAASD,OAAK,UAAU,EAAE,QAAQ;AAAA,IAClC,WAAWA,OAAK,YAAY,EAAE,QAAQ,EAAE,MAAwB,EAAE,QAAQ,MAAM;AAAA,IAChF,SAASA,OAAK,UAAU;AAAA,IACxB,WAAWA,OAAK,YAAY;AAAA;AAAA,IAG5B,WAAWA,OAAK,YAAY;AAAA,IAC5B,WAAWA,OAAK,YAAY;AAAA,IAC5B,SAASA,OAAK,UAAU;AAAA;AAAA,IAGxB,WAAWE,YAAU,YAAY,EAAE,QAAQ;AAAA,IAC3C,YAAYA,YAAU,aAAa,EAAE,QAAQ,EAAE,WAAW;AAAA,EAC5D;AAAA,EACA,CAAC,UAAU;AAAA,IACTC,QAAM,iCAAiC,EAAE,GAAG,MAAM,YAAY,MAAM,QAAQ;AAAA,IAC5EA,QAAM,uCAAuC,EAAE,GAAG,MAAM,cAAc;AAAA,IACtEA,QAAM,+BAA+B,EAAE,GAAG,MAAM,SAAS;AAAA,EAC3D;AACF;AAWO,IAAM,mBAAmBJ;AAAA,EAC9B;AAAA,EACA;AAAA,IACE,IAAIC,OAAK,IAAI,EAAE,WAAW;AAAA;AAAA,IAG1B,WAAWA,OAAK,YAAY,EAAE,QAAQ,EAAE,MAAwB;AAAA,IAChE,SAASA,OAAK,UAAU,EAAE,QAAQ;AAAA;AAAA,IAGlC,gBAAgBA,OAAK,iBAAiB,EACnC,QAAQ,EACR,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA;AAAA,IAG5D,QAAQA,OAAK,QAAQ,EAAE,QAAQ;AAAA,IAC/B,UAAUA,OAAK,UAAU;AAAA;AAAA,IAGzB,QAAQA,OAAK,QAAQ,EAAE,QAAQ,EAAE,MAAkC;AAAA,IACnE,QAAQA,OAAK,QAAQ;AAAA;AAAA,IAGrB,UAAUC,QAAM,UAAU;AAAA;AAAA,IAG1B,SAASD,OAAK,UAAU;AAAA,IACxB,WAAWA,OAAK,YAAY;AAAA,IAC5B,SAASA,OAAK,UAAU;AAAA;AAAA,IAGxB,WAAWE,YAAU,YAAY,EAAE,QAAQ;AAAA,IAC3C,YAAYA,YAAU,aAAa,EAAE,QAAQ,EAAE,WAAW;AAAA,EAC5D;AAAA,EACA,CAAC,UAAU;AAAA,IACTC,QAAM,qCAAqC,EAAE,GAAG,MAAM,cAAc;AAAA,IACpEA,QAAM,8BAA8B,EAAE,GAAG,MAAM,WAAW,MAAM,OAAO;AAAA,IACvEA,QAAM,6BAA6B,EAAE,GAAG,MAAM,SAAS;AAAA,EACzD;AACF;AAMO,IAAM,2BAA2BC,qBAAmB,kBAAkB;AACtE,IAAM,yBAAyBA,qBAAmB,gBAAgB;;;ACtHzE;AAAA,EACE,WAAAC;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC;AAAA,EACA,SAAAC;AAAA,EACA,eAAAC;AAAA,EACA,SAAAC;AAAA,OACK;AACP,SAAS,sBAAAC,4BAA0B;AAU5B,IAAM,YAAY;AAAA,EACvB,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,KAAK;AACP;AAOO,IAAM,cAAc;AAAA,EACzB,MAAM;AAAA,EACN,OAAO;AACT;AAcO,IAAM,mBAAmBC;AAAA,EAC9B;AAAA,EACA;AAAA,IACE,IAAIC,OAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA;AAAA,IAGvC,YAAYA,OAAK,aAAa,EAAE,QAAQ;AAAA;AAAA,IACxC,UAAUA,OAAK,WAAW,EAAE,QAAQ;AAAA;AAAA,IAGpC,WAAWA,OAAK,YAAY,EAAE,QAAQ;AAAA;AAAA,IACtC,SAASA,OAAK,UAAU,EAAE,QAAQ;AAAA;AAAA,IAGlC,OAAOA,OAAK,OAAO,EAAE,QAAQ,EAAE,QAAQ,MAAM;AAAA;AAAA;AAAA,IAG7C,mBAAmBA,OAAK,qBAAqB;AAAA;AAAA,IAC7C,iBAAiBA,OAAK,mBAAmB;AAAA;AAAA;AAAA,IAGzC,gBAAgBA,OAAK,iBAAiB,EACnC,QAAQ,EACR,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA;AAAA,IAG5D,UAAUC,YAAU,WAAW;AAAA;AAAA,IAG/B,WAAWA,YAAU,YAAY,EAAE,WAAW,EAAE,QAAQ;AAAA,IACxD,WAAWA,YAAU,YAAY,EAAE,WAAW,EAAE,QAAQ;AAAA,IACxD,WAAWD,OAAK,YAAY;AAAA;AAAA,EAC9B;AAAA,EACA,CAAC,UAAU;AAAA;AAAA,IAETE,cAAY,sBAAsB,EAAE;AAAA,MAClC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA;AAAA,IAEAC,QAAM,sBAAsB,EAAE,GAAG,MAAM,YAAY,MAAM,QAAQ;AAAA;AAAA,IAEjEA,QAAM,qBAAqB,EAAE,GAAG,MAAM,WAAW,MAAM,OAAO;AAAA;AAAA,IAE9DA,QAAM,yBAAyB,EAAE,GAAG,MAAM,mBAAmB,MAAM,eAAe;AAAA;AAAA,IAElFA,QAAM,mBAAmB,EAAE,GAAG,MAAM,cAAc;AAAA;AAAA,IAElDA,QAAM,sBAAsB,EAAE,GAAG,MAAM,QAAQ;AAAA,EACjD;AACF;AAWO,IAAM,oBAAoBJ;AAAA,EAC/B;AAAA,EACA;AAAA,IACE,IAAIC,OAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA;AAAA,IAGvC,aAAaA,OAAK,cAAc,EAAE,QAAQ;AAAA,IAC1C,YAAYA,OAAK,aAAa,EAAE,QAAQ;AAAA,IACxC,UAAUA,OAAK,WAAW,EAAE,QAAQ;AAAA,IACpC,WAAWA,OAAK,YAAY,EAAE,QAAQ;AAAA,IACtC,SAASA,OAAK,UAAU,EAAE,QAAQ;AAAA;AAAA,IAGlC,QAAQA,OAAK,QAAQ,EAAE,QAAQ;AAAA;AAAA;AAAA,IAG/B,aAAaI,QAAM,cAAc;AAAA,IACjC,YAAYA,QAAM,aAAa;AAAA;AAAA,IAG/B,SAASJ,OAAK,UAAU,EAAE,QAAQ;AAAA,IAClC,WAAWA,OAAK,YAAY,EAAE,QAAQ;AAAA;AAAA,IACtC,QAAQA,OAAK,QAAQ;AAAA;AAAA,IAGrB,gBAAgBA,OAAK,iBAAiB,EACnC,QAAQ,EACR,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA;AAAA,IAG5D,WAAWC,YAAU,WAAW,EAAE,WAAW,EAAE,QAAQ;AAAA,EACzD;AAAA,EACA,CAAC,UAAU;AAAA,IACTE,QAAM,qBAAqB,EAAE,GAAG,MAAM,WAAW;AAAA,IACjDA,QAAM,kBAAkB,EAAE,GAAG,MAAM,YAAY,MAAM,QAAQ;AAAA,IAC7DA,QAAM,iBAAiB,EAAE,GAAG,MAAM,OAAO;AAAA,IACzCA,QAAM,eAAe,EAAE,GAAG,MAAM,cAAc;AAAA,IAC9CA,QAAM,qBAAqB,EAAE,GAAG,MAAM,SAAS;AAAA,EACjD;AACF;AAMO,IAAM,wBAAwBE,qBAAmB,gBAAgB;AACjE,IAAM,0BAA0BA,qBAAmB,iBAAiB;;;ACjK3E;AAAA,EACE,WAAAC;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC;AAAA,EACA,SAAAC;AAAA,EACA;AAAA,EACA,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,eAAAC;AAAA,OACK;AACP,SAAS,OAAAC,YAAW;AACpB,SAAS,sBAAAC,4BAA0B;AA2B5B,IAAM,eAAeC;AAAA,EAC1B;AAAA,EACA;AAAA,IACE,SAASC,OAAK,SAAS,EAAE,WAAW;AAAA,IACpC,MAAMA,OAAK,MAAM,EAAE,QAAQ,EAAE,MAAsB;AAAA,IACnD,MAAMA,OAAK,MAAM;AAAA,IACjB,aAAaA,OAAK,aAAa;AAAA,IAC/B,QAAQA,OAAK,QAAQ,EAAE,QAAQ,EAAE,MAAwB;AAAA,IACzD,UAAUA,OAAK,WAAW;AAAA,IAC1B,QAAQA,OAAK,QAAQ,EAAE,QAAQ,EAAE,MAAwB,EAAE,QAAQ,SAAS;AAAA,IAC5E,WAAWC,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EAC1D;AAAA,EACA,CAAC,UAAU;AAAA,IACTC,QAAM,gCAAgC,EAAE,GAAG,MAAM,QAAQ,MAAM,MAAM;AAAA,IACrEA,QAAM,4BAA4B,EAAE,GAAG,MAAM,QAAQ;AAAA,EACvD;AACF;AAQO,IAAM,QAAQH,UAAQ,SAAS;AAAA,EACpC,IAAIC,OAAK,IAAI,EAAE,WAAW,EAAE,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA,EAChE,MAAMA,OAAK,MAAM,EAAE,QAAQ;AAAA,EAC3B,aAAaA,OAAK,aAAa;AAAA,EAC/B,UAAUA,OAAK,UAAU,EAAE,QAAQ,EAAE,MAAoB;AAAA,EACzD,eAAeG,UAAQ,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA,EAC5D,UAAUH,OAAK,UAAU,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EAClD,YAAYG,UAAQ,aAAa,EAAE,QAAQ;AAAA,EAC3C,UAAUA,UAAQ,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA,EAClD,UAAUC,QAAM,UAAU,EAAE,MAA+B;AAAA,EAC3D,WAAWH,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EACxD,WAAWA,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAC1D,CAAC;AAQM,IAAM,YAAYF;AAAA,EACvB;AAAA,EACA;AAAA,IACE,IAAI,KAAK,IAAI,EAAE,WAAW,EAAE,cAAc;AAAA,IAC1C,QAAQC,OAAK,SAAS,EACnB,QAAQ,EACR,WAAW,MAAM,MAAM,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IACrD,SAASA,OAAK,SAAS,EAAE,QAAQ;AAAA,IACjC,eAAeA,OAAK,gBAAgB;AAAA,IACpC,UAAUA,OAAK,WAAW;AAAA,IAC1B,MAAMA,OAAK,MAAM,EAAE,QAAQ,EAAE,MAAoB;AAAA,IACjD,QAAQG,UAAQ,QAAQ;AAAA,IACxB,WAAWH,OAAK,YAAY,EAAE,QAAQ,EAAE,MAAiB;AAAA,IACzD,UAAUG,UAAQ,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA,IACjD,eAAeH,OAAK,gBAAgB,EAAE,MAAqB,EAAE,QAAQ,MAAM;AAAA,IAC3E,mBAAmBG,UAAQ,qBAAqB;AAAA,IAChD,eAAeH,OAAK,gBAAgB,EAAE,MAAqB,EAAE,QAAQ,MAAM;AAAA,IAC3E,UAAUG,UAAQ,WAAW;AAAA,IAC7B,YAAYH,OAAK,aAAa,EAAE,MAAkB,EAAE,QAAQ,EAAE,QAAQ,QAAQ;AAAA,IAC9E,UAAUI,QAAM,UAAU,EAAE,MAA+B;AAAA,IAC3D,WAAWH,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,IACxD,WAAWA,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EAC1D;AAAA,EACA,CAAC,UAAU;AAAA,IACTC,QAAM,wBAAwB,EAAE,GAAG,MAAM,MAAM;AAAA,IAC/CA,QAAM,wBAAwB,EAAE,GAAG,MAAM,OAAO;AAAA,IAChDA,QAAM,+BAA+B,EAAE,GAAG,MAAM,aAAa;AAAA,IAC7DG,cAAY,mCAAmC,EAC5C,GAAG,MAAM,QAAQ,MAAM,aAAa,EACpC,MAAMC,OAAM,MAAM,aAAa,cAAc;AAAA,EAClD;AACF;AAQO,IAAM,aAAaP;AAAA,EACxB;AAAA,EACA;AAAA,IACE,IAAI,KAAK,IAAI,EAAE,WAAW,EAAE,cAAc;AAAA,IAC1C,QAAQC,OAAK,SAAS,EACnB,QAAQ,EACR,WAAW,MAAM,KAAK,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IACpD,gBAAgBA,OAAK,iBAAiB,EACnC,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IAC5D,SAASA,OAAK,SAAS,EAAE,QAAQ;AAAA,IACjC,SAASG,UAAQ,SAAS,EAAE,QAAQ;AAAA,IACpC,UAAUA,UAAQ,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA,IACjD,WAAWF,YAAU,YAAY;AAAA,IACjC,YAAYD,OAAK,aAAa,EAAE,QAAQ,EAAE,MAAuB;AAAA,IACjE,UAAUA,OAAK,WAAW,EAAE,QAAQ;AAAA,IACpC,UAAUI,QAAM,UAAU,EAAE,MAA+B;AAAA,IAC3D,WAAWH,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,IACxD,WAAWA,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EAC1D;AAAA,EACA,CAAC,UAAU;AAAA,IACTC,QAAM,8BAA8B,EAAE,GAAG,MAAM,QAAQ,MAAM,OAAO;AAAA,IACpEA,QAAM,2BAA2B,EAAE;AAAA,MACjC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,IACAG,cAAY,uBAAuB,EAAE;AAAA,MACnC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,IACAA,cAAY,8BAA8B,EACvC,GAAG,MAAM,QAAQ,MAAM,SAAS,MAAM,YAAY,MAAM,QAAQ,EAChE,MAAMC,OAAM,MAAM,cAAc,UAAU;AAAA,EAC/C;AACF;AAQO,IAAM,UAAUP,UAAQ,WAAW;AAAA,EACxC,QAAQC,OAAK,SAAS,EACnB,WAAW,EACX,WAAW,MAAM,KAAK,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,EACpD,cAAcG,UAAQ,eAAe,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA,EAC1D,UAAUH,OAAK,UAAU,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EAClD,WAAWC,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAC1D,CAAC;AAQM,IAAM,eAAeF;AAAA,EAC1B;AAAA,EACA;AAAA,IACE,IAAI,KAAK,IAAI,EAAE,WAAW,EAAE,cAAc;AAAA,IAC1C,QAAQC,OAAK,SAAS,EACnB,QAAQ,EACR,WAAW,MAAM,KAAK,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IACpD,aAAaG,UAAQ,cAAc,EAAE,QAAQ;AAAA,IAC7C,UAAUH,OAAK,UAAU,EAAE,QAAQ;AAAA,IACnC,YAAYA,OAAK,aAAa,EAAE,QAAQ,EAAE,MAA6B;AAAA,IACvE,UAAUA,OAAK,WAAW,EAAE,QAAQ;AAAA,IACpC,QAAQA,OAAK,QAAQ,EAAE,QAAQ,EAAE,MAAyB,EAAE,QAAQ,SAAS;AAAA,IAC7E,SAASA,OAAK,SAAS;AAAA,IACvB,YAAYA,OAAK,aAAa;AAAA,IAC9B,cAAcA,OAAK,eAAe;AAAA,IAClC,iBAAiBG,UAAQ,mBAAmB;AAAA,IAC5C,oBAAoBH,OAAK,qBAAqB;AAAA,IAC9C,uBAAuBG,UAAQ,yBAAyB;AAAA,IACxD,cAAcH,OAAK,eAAe;AAAA,IAClC,gBAAgBC,YAAU,kBAAkB;AAAA,IAC5C,UAAUG,QAAM,UAAU,EAAE,MAA+B;AAAA,IAC3D,QAAQH,YAAU,SAAS;AAAA,IAC3B,WAAWA,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,IACxD,WAAWA,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EAC1D;AAAA,EACA,CAAC,UAAU;AAAA,IACTC,QAAM,8BAA8B,EAAE,GAAG,MAAM,QAAQ,MAAM,YAAY,MAAM,QAAQ;AAAA,IACvFG,cAAY,6BAA6B,EAAE,GAAG,MAAM,UAAU;AAAA,IAC9DH,QAAM,yBAAyB,EAAE,GAAG,MAAM,MAAM;AAAA,EAClD;AACF;AAaO,IAAM,qBAAqBH;AAAA,EAChC;AAAA,EACA;AAAA,IACE,IAAI,KAAK,IAAI,EAAE,WAAW,EAAE,cAAc;AAAA,IAC1C,WAAWC,OAAK,YAAY,EAAE,QAAQ;AAAA,IACtC,eAAe,KAAK,gBAAgB,EACjC,QAAQ,EACR,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IAC5D,WAAWA,OAAK,YAAY,EAAE,QAAQ;AAAA,IACtC,SAASI,QAAM,SAAS,EAAE,QAAQ,EAAE,MAA+B;AAAA,IACnE,QAAQJ,OAAK,QAAQ,EAClB,QAAQ,EACR,MAAgC,EAChC,QAAQ,SAAS;AAAA,IACpB,UAAUG,UAAQ,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA,IACjD,aAAaF,YAAU,gBAAgB,EAAE,cAAc,KAAK,CAAC,EAAE,QAAQ,EAAE,WAAW;AAAA,IACpF,SAAS,KAAK,UAAU;AAAA,IACxB,gBAAgBA,YAAU,oBAAoB,EAAE,cAAc,KAAK,CAAC;AAAA,IACpE,WAAWD,OAAK,YAAY;AAAA,IAC5B,aAAaC,YAAU,gBAAgB,EAAE,cAAc,KAAK,CAAC;AAAA,IAC7D,WAAWA,YAAU,cAAc,EAAE,cAAc,KAAK,CAAC,EAAE,QAAQ,EAAE,WAAW;AAAA,IAChF,WAAWA,YAAU,cAAc,EAAE,cAAc,KAAK,CAAC,EAAE,QAAQ,EAAE,WAAW;AAAA,EAClF;AAAA,EACA,CAAC,UAAU;AAAA,IACTI,cAAY,kCAAkC,EAAE,GAAG,MAAM,SAAS;AAAA,IAClEH,QAAM,oCAAoC,EAAE,GAAG,MAAM,QAAQ,MAAM,WAAW;AAAA,IAC9EA,QAAM,sCAAsC,EAAE,GAAG,MAAM,aAAa;AAAA,EACtE;AACF;AAQO,IAAM,eAAeH;AAAA,EAC1B;AAAA,EACA;AAAA,IACE,IAAI,KAAK,IAAI,EAAE,WAAW,EAAE,cAAc;AAAA,IAC1C,QAAQC,OAAK,SAAS,EACnB,QAAQ,EACR,WAAW,MAAM,KAAK,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IACpD,SAASA,OAAK,SAAS,EAAE,QAAQ;AAAA,IACjC,QAAQG,UAAQ,QAAQ,EAAE,QAAQ;AAAA,IAClC,UAAUC,QAAM,WAAW,EAAE,MAAgB;AAAA,IAC7C,qBAAqBD,UAAQ,uBAAuB;AAAA,IACpD,YAAYF,YAAU,aAAa,EAAE,QAAQ,EAAE,WAAW;AAAA,IAC1D,UAAUG,QAAM,UAAU,EAAE,MAA+B;AAAA,EAC7D;AAAA,EACA,CAAC,UAAU;AAAA,IACTF,QAAM,gCAAgC,EAAE,GAAG,MAAM,QAAQ,MAAM,OAAO;AAAA,IACtEA,QAAM,+BAA+B,EAAE,GAAG,MAAM,UAAU;AAAA,EAC5D;AACF;AAQO,IAAM,oBAAoBH;AAAA,EAC/B;AAAA,EACA;AAAA,IACE,IAAI,KAAK,IAAI,EAAE,WAAW,EAAE,cAAc;AAAA,IAC1C,gBAAgBC,OAAK,iBAAiB,EACnC,QAAQ,EACR,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IAC5D,QAAQA,OAAK,SAAS,EACnB,QAAQ,EACR,WAAW,MAAM,MAAM,IAAI,EAAE,UAAU,WAAW,CAAC;AAAA,IACtD,QAAQA,OAAK,QAAQ,EAAE,QAAQ,EAAE,MAA0B;AAAA,IAC3D,SAASG,UAAQ,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA,IAC/C,oBAAoBF,YAAU,sBAAsB,EAAE,QAAQ;AAAA,IAC9D,kBAAkBA,YAAU,oBAAoB,EAAE,QAAQ;AAAA,IAC1D,oBAAoBE,UAAQ,sBAAsB;AAAA,IAClD,YAAYF,YAAU,aAAa;AAAA,IACnC,UAAUA,YAAU,WAAW;AAAA,IAC/B,cAAcE,UAAQ,eAAe,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA,IAC1D,eAAeF,YAAU,iBAAiB;AAAA,IAC1C,SAASD,OAAK,SAAS;AAAA,IACvB,wBAAwBA,OAAK,0BAA0B;AAAA,IACvD,sBAAsB,KAAK,wBAAwB,EAChD,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,WAAW,CAAC;AAAA,IAC7D,qBAAqB,KAAK,uBAAuB,EAC9C,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,WAAW,CAAC;AAAA,IAC7D,YAAYC,YAAU,aAAa;AAAA,IACnC,cAAcD,OAAK,eAAe;AAAA,IAClC,mBAAmBG,UAAQ,sBAAsB,EAAE,QAAQ,CAAC;AAAA,IAC5D,iBAAiBH,OAAK,mBAAmB,EACtC,WAAW,MAAM,MAAM,IAAI,EAAE,UAAU,WAAW,CAAC;AAAA,IACtD,mBAAmBC,YAAU,qBAAqB;AAAA,IAClD,UAAUG,QAAM,UAAU,EAAE,MAA+B;AAAA,IAC3D,WAAWH,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,IACxD,WAAWA,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EAC1D;AAAA,EACA,CAAC,UAAU;AAAA,IACTC,QAAM,0BAA0B,EAAE,GAAG,MAAM,cAAc;AAAA,IACzDA,QAAM,0BAA0B,EAAE,GAAG,MAAM,MAAM;AAAA,IACjDA,QAAM,8BAA8B,EAAE,GAAG,MAAM,gBAAgB;AAAA,IAC/DG,cAAY,8BAA8B,EAAE,GAAG,MAAM,sBAAsB;AAAA,IAC3EA,cAAY,qCAAqC,EAC9C,GAAG,MAAM,gBAAgB,MAAM,MAAM,EACrC,MAAMC,kDAAiD;AAAA,EAC5D;AACF;AAQO,IAAM,eAAeP;AAAA,EAC1B;AAAA,EACA;AAAA,IACE,IAAI,KAAK,IAAI,EAAE,WAAW,EAAE,cAAc;AAAA,IAC1C,gBAAgBC,OAAK,iBAAiB,EACnC,QAAQ,EACR,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IAC5D,SAASA,OAAK,SAAS,EAAE,QAAQ;AAAA,IACjC,SAASG,UAAQ,SAAS,EAAE,QAAQ;AAAA,IACpC,UAAUA,UAAQ,UAAU,EAAE,QAAQ,EAAE,QAAQ,GAAG;AAAA,IACnD,WAAWF,YAAU,YAAY;AAAA,IACjC,YAAYD,OAAK,aAAa,EAAE,QAAQ,EAAE,MAAuB;AAAA,IACjE,UAAUA,OAAK,WAAW,EAAE,QAAQ;AAAA,IACpC,UAAUI,QAAM,UAAU,EAAE,MAA+B;AAAA,IAC3D,WAAWH,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,IACxD,WAAWA,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EAC1D;AAAA,EACA,CAAC,UAAU;AAAA,IACTC,QAAM,kCAAkC,EAAE,GAAG,MAAM,gBAAgB,MAAM,OAAO;AAAA,IAChFA,QAAM,6BAA6B,EAAE;AAAA,MACnC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,IACAG,cAAY,yBAAyB,EAAE;AAAA,MACrC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAMO,IAAM,mBAAmBE,qBAAmB,YAAY;AACxD,IAAM,aAAaA,qBAAmB,KAAK;AAC3C,IAAM,iBAAiBA,qBAAmB,SAAS;AACnD,IAAM,kBAAkBA,qBAAmB,UAAU;AACrD,IAAM,eAAeA,qBAAmB,OAAO;AAC/C,IAAM,oBAAoBA,qBAAmB,YAAY;AACzD,IAAM,2BAA2BA,qBAAmB,kBAAkB;AACtE,IAAM,oBAAoBA,qBAAmB,YAAY;AACzD,IAAM,yBAAyBA,qBAAmB,iBAAiB;AACnE,IAAM,oBAAoBA,qBAAmB,YAAY;;;ACpYhE;AAAA,EACE,WAAAC;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC;AAAA,EACA,SAAAC;AAAA,EACA,QAAAC;AAAA,EACA,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,eAAAC;AAAA,EACA,WAAAC;AAAA,OACK;AACP,SAAS,OAAAC,YAAW;AACpB,SAAS,sBAAAC,4BAA0B;AA2B5B,IAAM,aAAaC;AAAA,EACxB;AAAA,EACA;AAAA,IACE,IAAIC,MAAK,IAAI,EAAE,WAAW,EAAE,cAAc;AAAA;AAAA,IAE1C,gBAAgBC,OAAK,iBAAiB,EACnC,QAAQ,EACR,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IAC5D,MAAMA,OAAK,MAAM,EAAE,QAAQ;AAAA;AAAA,IAC3B,UAAUC,QAAM,WAAW,EAAE,QAAQ,EAAE,MAAwB;AAAA,IAC/D,QAAQD,OAAK,QAAQ,EAAE,QAAQ;AAAA;AAAA,IAC/B,eAAeE,UAAQ,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA,IAC5D,WAAWA,UAAQ,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA,IACpD,QAAQA,UAAQ,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA,IAC9C,aAAaC,SAAQ,gBAAgB,EAAE,WAAW,IAAI,OAAO,EAAE,CAAC;AAAA,IAChE,WAAWH,OAAK,YAAY;AAAA,IAC5B,WAAWA,OAAK,YAAY;AAAA,IAC5B,WAAWI,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,IACxD,WAAWA,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EAC1D;AAAA,EACA,CAAC,UAAU;AAAA,IACTC,cAAY,wBAAwB,EAAE,GAAG,MAAM,gBAAgB,MAAM,IAAI;AAAA,IACzEA,cAAY,wBAAwB,EACjC,GAAG,MAAM,cAAc,EACvB,MAAMC,iBAAgB;AAAA,IACzBC,QAAM,oBAAoB,EAAE,GAAG,MAAM,cAAc;AAAA,EACrD;AACF;AAcO,IAAM,gBAAgBT;AAAA,EAC3B;AAAA,EACA;AAAA,IACE,IAAIC,MAAK,IAAI,EAAE,WAAW,EAAE,cAAc;AAAA;AAAA,IAE1C,gBAAgBC,OAAK,iBAAiB,EACnC,QAAQ,EACR,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IAC5D,cAAcA,OAAK,eAAe,EAAE,QAAQ;AAAA,IAC5C,gBAAgBA,OAAK,iBAAiB,EAAE,QAAQ;AAAA,IAChD,MAAMG,SAAQ,QAAQ,EAAE,WAAW,IAAI,OAAO,EAAE,CAAC,EAAE,QAAQ;AAAA,IAC3D,QAAQH,OAAK,QAAQ,EAAE,QAAQ,EAAE,MAA0B;AAAA,IAC3D,aAAaI,YAAU,cAAc,EAAE,QAAQ;AAAA,IAC/C,WAAWA,YAAU,YAAY;AAAA,IACjC,WAAWJ,OAAK,YAAY;AAAA,IAC5B,WAAWA,OAAK,YAAY;AAAA,IAC5B,WAAWI,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,IACxD,WAAWA,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EAC1D;AAAA,EACA,CAAC,UAAU;AAAA,IACTC,cAAY,iCAAiC,EAAE;AAAA,MAC7C,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,IACAE,QAAM,wBAAwB,EAAE,GAAG,MAAM,cAAc;AAAA,IACvDA,QAAM,4BAA4B,EAAE;AAAA,MAClC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IACR,EAAE,MAAMD,wBAAuB;AAAA,EACjC;AACF;AAQO,IAAM,iBAAiBE,qBAAmB,UAAU;AACpD,IAAM,qBAAqBA,qBAAmB,aAAa;;;AC1HlE;AAAA,EACE,WAAAC;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,SAAAC;AAAA,EACA,eAAAC;AAAA,OACK;AACP,SAAS,sBAAAC,4BAA0B;AACnC,SAAS,KAAAC,WAAS;AAkBX,IAAM,iBAA0C;AAAA,EACrD,EAAE,MAAM,iBAAiB,MAAM,EAAE,SAAS,gBAAM,SAAS,gBAAgB,GAAG,WAAW,GAAG;AAAA,EAC1F,EAAE,MAAM,UAAU,MAAM,EAAE,SAAS,gBAAM,SAAS,SAAS,GAAG,WAAW,GAAG;AAAA,EAC5E,EAAE,MAAM,gBAAgB,MAAM,EAAE,SAAS,gBAAM,SAAS,eAAe,GAAG,WAAW,GAAG;AAAA,EACxF,EAAE,MAAM,iBAAiB,MAAM,EAAE,SAAS,gBAAM,SAAS,gBAAgB,GAAG,WAAW,GAAG;AAAA,EAC1F,EAAE,MAAM,eAAe,MAAM,EAAE,SAAS,gBAAM,SAAS,cAAc,GAAG,WAAW,GAAG;AAAA,EACtF,EAAE,MAAM,UAAU,MAAM,EAAE,SAAS,gBAAM,SAAS,SAAS,GAAG,WAAW,GAAG;AAAA,EAC5E,EAAE,MAAM,UAAU,MAAM,EAAE,SAAS,gBAAM,SAAS,SAAS,GAAG,WAAW,GAAG;AAC9E;AAEO,IAAM,gBAAgBC,IAC1B,OAAOA,IAAE,OAAO,GAAGA,IAAE,OAAO,CAAC,EAC7B,OAAO,CAAC,UAAU,OAAO,KAAK,KAAK,EAAE,SAAS,GAAG;AAAA,EAChD,SAAS;AACX,CAAC;AAEI,IAAM,qBAAqBA,IAC/B,OAAO,EACP,OAAO,CAAC,EACR,MAAM,iBAAiB,yCAAyC,EAChE,UAAU,CAAC,UAAU,MAAM,YAAY,CAAC;AAEpC,IAAM,qBAAqBA,IAC/B,OAAO,EACP,OAAO,CAAC,EACR,MAAM,iBAAiB,yCAAyC,EAChE,UAAU,CAAC,UAAU,MAAM,YAAY,CAAC;AAEpC,IAAM,4BAA4BA,IACtC,OAAO,EACP,IAAI,CAAC,EACL,MAAM,8BAA8B,4CAA4C,EAChF,UAAU,CAAC,UAAU,MAAM,YAAY,CAAC;AAEpC,IAAM,eAAeC;AAAA,EAC1B;AAAA,EACA;AAAA,IACE,IAAIC,OAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA,IACvC,OAAOA,OAAK,OAAO,EAAE,QAAQ;AAAA,IAC7B,OAAOA,OAAK,OAAO;AAAA,IACnB,aAAaA,OAAK,cAAc;AAAA,IAChC,MAAMC,QAAM,MAAM,EAAE,QAAQ,EAAE,MAAe;AAAA,IAC7C,cAAcA,QAAM,eAAe,EAAE,MAAsB;AAAA,IAC3D,OAAOA,QAAM,OAAO,EAAE,MAAuB;AAAA,IAC7C,cAAcD,OAAK,eAAe;AAAA,IAClC,cAAcA,OAAK,eAAe;AAAA,IAClC,QAAQA,OAAK,QAAQ;AAAA,IACrB,WAAWA,OAAK,YAAY;AAAA,IAC5B,aAAaE,UAAQ,cAAc,EAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,IAC3D,WAAWC,UAAQ,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA,IACpD,WAAWC,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,IACxD,WAAWA,YAAU,YAAY,EAC9B,QAAQ,EACR,WAAW,EACX,UAAU,MAAM,oBAAI,KAAK,CAAC;AAAA,EAC/B;AAAA,EACA,CAAC,UAAU;AAAA,IACTC,cAAY,0BAA0B,EAAE,GAAG,MAAM,KAAK;AAAA,IACtDA,cAAY,0BAA0B,EAAE,GAAG,MAAM,KAAK;AAAA,IACtDC,QAAM,kCAAkC,EAAE,GAAG,MAAM,aAAa,MAAM,SAAS;AAAA,EACjF;AACF;AAEO,IAAM,kBAAkBP;AAAA,EAC7B;AAAA,EACA;AAAA,IACE,IAAIC,OAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA,IACvC,cAAcA,OAAK,eAAe,EAC/B,QAAQ,EACR,WAAW,MAAM,aAAa,OAAO,EAAE,UAAU,UAAU,CAAC;AAAA,IAC/D,MAAMA,OAAK,MAAM,EAAE,QAAQ;AAAA,IAC3B,UAAUA,OAAK,WAAW,EAAE,QAAQ;AAAA,IACpC,MAAMC,QAAM,MAAM,EAAE,QAAQ,EAAE,MAAe;AAAA,IAC7C,MAAMD,OAAK,MAAM;AAAA,IACjB,aAAaE,UAAQ,cAAc,EAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,IAC3D,WAAWC,UAAQ,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA,IACpD,WAAWC,YAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,IACxD,WAAWA,YAAU,YAAY,EAC9B,QAAQ,EACR,WAAW,EACX,UAAU,MAAM,oBAAI,KAAK,CAAC;AAAA,EAC/B;AAAA,EACA,CAAC,UAAU;AAAA,IACTC,cAAY,iCAAiC,EAAE,GAAG,MAAM,QAAQ;AAAA,IAChEA,cAAY,oCAAoC,EAAE,GAAG,MAAM,cAAc,MAAM,IAAI;AAAA,IACnFC,QAAM,mCAAmC,EAAE,GAAG,MAAM,cAAc,MAAM,SAAS;AAAA,IACjFA,QAAM,wCAAwC,EAAE,GAAG,MAAM,cAAc,MAAM,WAAW;AAAA,EAC1F;AACF;AAKO,IAAM,mBAAmBC,qBAAmB,cAAc;AAAA,EAC/D,OAAO,MAAM;AAAA,EACb,OAAO,MAAM,mBAAmB,SAAS;AAAA,EACzC,MAAM,MAAM;AAAA,EACZ,cAAc,MAAM,cAAc,QAAQ;AAC5C,CAAC;AAEM,IAAM,uBAAuBA,qBAAmB,iBAAiB;AAAA,EACtE,cAAc,MAAM;AAAA,EACpB,UAAU,MAAM;AAAA,EAChB,MAAM,MAAM;AACd,CAAC;AAEM,IAAM,qBAAqBT,IAAE,OAAO;AAAA,EACzC,OAAO;AAAA,EACP,QAAQ,aAAa,SAAS;AAChC,CAAC;AAEM,IAAM,wBAAwB,iBAAiB,QAAQ,EAAE,OAAO;AAAA,EACrE,OAAOA,IAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,QAAQ,GAAG;AAAA,EACnD,QAAQA,IAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;AAAA,EACzC,QAAQ,aAAa,SAAS;AAAA,EAC9B,eAAeA,IAAE,QAAQ,EAAE,QAAQ,IAAI;AACzC,CAAC;AAEM,IAAM,yBAAyBA,IAAE,OAAO;AAAA,EAC7C,UAAU;AAAA,EACV,QAAQ,aAAa,SAAS;AAChC,CAAC;AAEM,IAAM,2BAA2B,iBAAiB,QAAQ,EAAE,OAAO;AAAA,EACxE,OAAOA,IAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,QAAQ,GAAG;AAAA,EACnD,QAAQA,IAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;AAAA,EACzC,cAAc;AAAA,EACd,QAAQ,aAAa,SAAS;AAAA,EAC9B,eAAeA,IAAE,QAAQ,EAAE,QAAQ,IAAI;AACzC,CAAC;AAEM,IAAM,yBAAyB,iBAAiB,QAAQ,EAAE,OAAO;AAAA,EACtE,OAAOA,IAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,QAAQ,GAAG;AAAA,EACnD,QAAQA,IAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;AAAA,EACzC,QAAQ,aAAa,SAAS;AAChC,CAAC;;;ACxKD;AAAA,EACE,WAAAU;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC;AAAA,EACA,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,eAAAC;AAAA,OACK;AACP,SAAS,sBAAAC,4BAA0B;AAwB5B,IAAM,mBAAmBC;AAAA,EAC9B;AAAA,EACA;AAAA,IACE,IAAIC,OAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA;AAAA,IAEvC,gBAAgBA,OAAK,iBAAiB,EACnC,QAAQ,EACR,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IAC5D,KAAKA,OAAK,KAAK,EAAE,QAAQ;AAAA,IACzB,QAAQA,OAAK,QAAQ,EAAE,QAAQ;AAAA,IAC/B,QAAQA,OAAK,QAAQ,EAClB,MAAM,EACN,QAAQ,EACR,WAAW,MAAM,CAAC,CAAC;AAAA,IACtB,SAASC,UAAQ,SAAS,EAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,IAClD,aAAaC,QAAM,cAAc,EAC9B,QAAQ,EACR,MAAmB,EACnB,QAAQ,EAAE,UAAU,GAAG,WAAW,IAAK,CAAC;AAAA,IAC3C,WAAWC,YAAU,cAAc,EAAE,cAAc,KAAK,CAAC,EAAE,QAAQ,EAAE,WAAW;AAAA,IAChF,WAAWA,YAAU,cAAc,EAAE,cAAc,KAAK,CAAC,EAAE,QAAQ,EAAE,WAAW;AAAA,EAClF;AAAA,EACA,CAAC,UAAU;AAAA,IACTC,QAAM,8BAA8B,EAAE,GAAG,MAAM,cAAc;AAAA,IAC7DA,QAAM,+BAA+B,EAAE,GAAG,MAAM,gBAAgB,MAAM,OAAO;AAAA,IAC7EC,cAAY,iCAAiC,EAAE,GAAG,MAAM,gBAAgB,MAAM,GAAG;AAAA,EACnF;AACF;AAaO,IAAM,oBAAoBN;AAAA,EAC/B;AAAA,EACA;AAAA,IACE,IAAIC,OAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA;AAAA,IAEvC,gBAAgBA,OAAK,iBAAiB,EACnC,QAAQ,EACR,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA;AAAA,IAE5D,YAAYA,OAAK,aAAa,EAC3B,QAAQ,EACR,WAAW,MAAM,iBAAiB,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IAChE,WAAWA,OAAK,YAAY,EAAE,QAAQ;AAAA,IACtC,SAASE,QAAM,SAAS,EAAE,QAAQ,EAAE,MAA+B;AAAA,IACnE,QAAQF,OAAK,QAAQ,EAAE,QAAQ,EAAE,MAAqB,EAAE,QAAQ,SAAS;AAAA,IACzE,UAAUM,UAAQ,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA,IACjD,eAAeH,YAAU,mBAAmB,EAAE,cAAc,KAAK,CAAC;AAAA,IAClE,cAAcG,UAAQ,eAAe;AAAA,IACrC,OAAON,OAAK,OAAO;AAAA,IACnB,WAAWA,OAAK,YAAY,EAAE,QAAQ;AAAA,IACtC,WAAWG,YAAU,cAAc,EAAE,cAAc,KAAK,CAAC,EAAE,QAAQ,EAAE,WAAW;AAAA,IAChF,WAAWA,YAAU,cAAc,EAAE,cAAc,KAAK,CAAC,EAAE,QAAQ,EAAE,WAAW;AAAA,EAClF;AAAA,EACA,CAAC,UAAU;AAAA,IACTC,QAAM,iCAAiC,EAAE,GAAG,MAAM,UAAU;AAAA,IAC5DA,QAAM,sCAAsC,EAAE,GAAG,MAAM,gBAAgB,MAAM,MAAM;AAAA,IACnFC,cAAY,+BAA+B,EAAE,GAAG,MAAM,SAAS;AAAA,IAC/DD,QAAM,gCAAgC,EAAE,GAAG,MAAM,SAAS;AAAA,EAC5D;AACF;AAcO,IAAM,gBAAgBL;AAAA,EAC3B;AAAA,EACA;AAAA,IACE,IAAIC,OAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA;AAAA,IAEvC,gBAAgBA,OAAK,iBAAiB,EACnC,QAAQ,EACR,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA;AAAA,IAE5D,YAAYA,OAAK,aAAa,EAC3B,QAAQ,EACR,WAAW,MAAM,iBAAiB,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IAChE,WAAWA,OAAK,YAAY,EAAE,QAAQ;AAAA,IACtC,SAASE,QAAM,SAAS,EAAE,QAAQ,EAAE,MAA+B;AAAA,IACnE,WAAWF,OAAK,YAAY,EAAE,QAAQ;AAAA,IACtC,aAAaG,YAAU,gBAAgB,EAAE,cAAc,KAAK,CAAC,EAAE,QAAQ,EAAE,WAAW;AAAA,IACpF,UAAUA,YAAU,aAAa,EAAE,cAAc,KAAK,CAAC;AAAA,IACvD,WAAWH,OAAK,YAAY;AAAA,IAC5B,WAAWG,YAAU,cAAc,EAAE,cAAc,KAAK,CAAC,EAAE,QAAQ,EAAE,WAAW;AAAA,EAClF;AAAA,EACA,CAAC,UAAU;AAAA,IACTC,QAAM,8BAA8B,EAAE,GAAG,MAAM,WAAW;AAAA,IAC1DC,cAAY,2BAA2B,EAAE,GAAG,MAAM,SAAS;AAAA,IAC3DD,QAAM,2BAA2B,EAAE,GAAG,MAAM,cAAc;AAAA,EAC5D;AACF;AAMO,IAAM,wBAAwBG,qBAAmB,gBAAgB;AACjE,IAAM,wBAAwBA,qBAAmB,iBAAiB;AAClE,IAAM,sBAAsBA,qBAAmB,aAAa;;;AC5JnE;AAAA,EACE,WAAAC;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA;AAAA,EACA,SAAAC;AAAA,OACK;AACP,SAAS,sBAAAC,4BAA0B;AA6C5B,IAAM,iBAAiBC;AAAA,EAC5B;AAAA,EACA;AAAA,IACE,IAAIC,OAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA;AAAA,IAEvC,gBAAgBA,OAAK,iBAAiB,EACnC,QAAQ,EACR,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IAC5D,MAAMA,OAAK,MAAM,EAAE,QAAQ;AAAA,IAC3B,aAAaA,OAAK,aAAa;AAAA,IAC/B,gBAAgBA,OAAK,iBAAiB,EAAE,QAAQ;AAAA,IAChD,UAAUA,OAAK,UAAU,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,IAClD,aAAaA,OAAK,cAAc,EAAE,MAAmB,EAAE,QAAQ;AAAA,IAC/D,eAAeC,QAAM,gBAAgB,EAAE,QAAQ,EAAE,MAAqB;AAAA,IACtE,SAASA,QAAM,SAAS;AAAA,IACxB,SAASC,UAAQ,SAAS,EAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,IAClD,WAAWC,YAAU,eAAe,EAAE,cAAc,KAAK,CAAC;AAAA,IAC1D,YAAYH,OAAK,aAAa,EAAE,MAAkB;AAAA,IAClD,WAAWG,YAAU,eAAe,EAAE,cAAc,KAAK,CAAC,EAAE,QAAQ;AAAA,IACpE,qBAAqBC,UAAQ,sBAAsB,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA,IACxE,YAAYA,UAAQ,aAAa,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA,IACtD,wBAAwB,KAAK,0BAA0B,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA,IAC5E,YAAYJ,OAAK,aAAa,EAAE,QAAQ,EAAE,QAAQ,SAAS;AAAA,IAC3D,kBAAkBC,QAAM,mBAAmB;AAAA,IAC3C,WAAWD,OAAK,YAAY,EAAE,QAAQ;AAAA,IACtC,eAAeA,OAAK,iBAAiB,EAAE,MAAqB,EAAE,QAAQ;AAAA,IACtE,WAAWG,YAAU,cAAc,EAAE,cAAc,KAAK,CAAC,EAAE,QAAQ,EAAE,WAAW;AAAA,IAChF,WAAWA,YAAU,cAAc,EAAE,cAAc,KAAK,CAAC,EAAE,QAAQ,EAAE,WAAW;AAAA,EAClF;AAAA,EACA,CAAC,UAAU;AAAA,IACTE,QAAM,kCAAkC,EAAE,GAAG,MAAM,cAAc;AAAA,IACjEA,QAAM,8BAA8B,EAAE,GAAG,MAAM,WAAW,MAAM,OAAO;AAAA,IACvEA,QAAM,8BAA8B,EAAE,GAAG,MAAM,UAAU;AAAA,EAC3D;AACF;AAaO,IAAM,iBAAiBN;AAAA,EAC5B;AAAA,EACA;AAAA,IACE,IAAIC,OAAK,IAAI,EACV,WAAW,EACX,WAAW,MAAM,OAAO,WAAW,CAAC;AAAA;AAAA,IAEvC,QAAQA,OAAK,SAAS,EACnB,QAAQ,EACR,WAAW,MAAM,eAAe,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA;AAAA,IAE9D,gBAAgBA,OAAK,iBAAiB,EACnC,QAAQ,EACR,WAAW,MAAM,aAAa,IAAI,EAAE,UAAU,UAAU,CAAC;AAAA,IAC5D,aAAaG,YAAU,gBAAgB,EAAE,cAAc,KAAK,CAAC,EAAE,QAAQ;AAAA,IACvE,WAAWA,YAAU,cAAc,EAAE,cAAc,KAAK,CAAC,EAAE,QAAQ;AAAA,IACnE,aAAaA,YAAU,gBAAgB,EAAE,cAAc,KAAK,CAAC;AAAA,IAC7D,QAAQH,OAAK,QAAQ,EAAE,MAAuB,EAAE,QAAQ;AAAA,IACxD,SAASI,UAAQ,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA,IAC/C,QAAQH,QAAM,QAAQ;AAAA,IACtB,OAAOA,QAAM,OAAO,EAAE,MAAsB;AAAA,IAC5C,SAASD,OAAK,UAAU,EAAE,QAAQ;AAAA,IAClC,UAAUA,OAAK,WAAW,EAAE,QAAQ;AAAA,EACtC;AAAA,EACA,CAAC,UAAU;AAAA,IACTK,QAAM,0BAA0B,EAAE,GAAG,MAAM,QAAQ,MAAM,SAAS;AAAA,IAClEA,QAAM,kCAAkC,EAAE,GAAG,MAAM,cAAc;AAAA,IACjEA,QAAM,4BAA4B,EAAE,GAAG,MAAM,MAAM;AAAA,EACrD;AACF;AAaO,IAAM,qBAAqBN;AAAA,EAChC;AAAA,EACA;AAAA,IACE,IAAIC,OAAK,IAAI,EAAE,WAAW;AAAA,IAC1B,MAAMA,OAAK,MAAM,EAAE,QAAQ;AAAA,IAC3B,SAASA,OAAK,SAAS,EAAE,QAAQ;AAAA,IACjC,UAAUA,OAAK,WAAW;AAAA,IAC1B,cAAcC,QAAM,cAAc,EAAE,QAAQ,EAAE,MAA4B;AAAA,IAC1E,QAAQD,OAAK,QAAQ,EAAE,MAAsB,EAAE,QAAQ;AAAA,IACvD,cAAcG,YAAU,iBAAiB,EAAE,cAAc,KAAK,CAAC,EAAE,QAAQ,EAAE,WAAW;AAAA,IACtF,gBAAgBA,YAAU,mBAAmB,EAAE,cAAc,KAAK,CAAC;AAAA,EACrE;AAAA,EACA,CAAC,UAAU;AAAA,IACTE,QAAM,gCAAgC,EAAE,GAAG,MAAM,QAAQ;AAAA,IACzDA,QAAM,gCAAgC,EAAE,GAAG,MAAM,MAAM;AAAA,EACzD;AACF;AAMO,IAAM,sBAAsBC,qBAAmB,cAAc;AAC7D,IAAM,sBAAsBA,qBAAmB,cAAc;AAC7D,IAAM,0BAA0BA,qBAAmB,kBAAkB;","names":["pgTable","text","timestamp","integer","index","uniqueIndex","createInsertSchema","pgTable","text","timestamp","integer","index","uniqueIndex","createInsertSchema","pgTable","text","timestamp","index","uniqueIndex","createInsertSchema","pgTable","text","timestamp","index","uniqueIndex","createInsertSchema","pgTable","text","timestamp","boolean","integer","jsonb","index","uniqueIndex","createInsertSchema","z","z","pgTable","text","boolean","integer","timestamp","uniqueIndex","index","jsonb","z","createInsertSchema","pgTable","text","timestamp","boolean","uniqueIndex","index","createInsertSchema","pgTable","text","boolean","timestamp","uniqueIndex","index","createInsertSchema","pgTable","text","timestamp","boolean","jsonb","uniqueIndex","index","createInsertSchema","pgTable","text","jsonb","boolean","timestamp","uniqueIndex","index","createInsertSchema","pgTable","text","timestamp","createInsertSchema","pgTable","text","integer","timestamp","jsonb","index","uniqueIndex","boolean","createInsertSchema","z","pgTable","text","integer","boolean","jsonb","timestamp","uniqueIndex","index","createInsertSchema","z","index","pgTable","text","timestamp","jsonb","uniqueIndex","varchar","createInsertSchema","z","pgTable","text","jsonb","timestamp","uniqueIndex","index","varchar","createInsertSchema","z","pgTable","text","timestamp","uniqueIndex","createInsertSchema","boolean","index","jsonb","pgTable","text","timestamp","uniqueIndex","varchar","pgTable","text","varchar","boolean","timestamp","jsonb","uniqueIndex","index","index","integer","pgTable","text","timestamp","uniqueIndex","varchar","sql","pgTable","text","timestamp","jsonb","index","boolean","integer","uniqueIndex","sql","createInsertSchema","z","pgTable","text","jsonb","boolean","integer","timestamp","uniqueIndex","sql","index","z","createInsertSchema","pgTable","text","timestamp","jsonb","index","boolean","integer","uniqueIndex","createInsertSchema","z","pgTable","text","boolean","integer","jsonb","timestamp","index","uniqueIndex","z","createInsertSchema","pgTable","text","timestamp","boolean","integer","jsonb","index","uniqueIndex","sql","createInsertSchema","z","pgTable","text","boolean","integer","jsonb","timestamp","uniqueIndex","sql","index","createInsertSchema","z","boolean","index","jsonb","pgTable","text","timestamp","uniqueIndex","varchar","createInsertSchema","createSelectSchema","z","pgTable","text","varchar","jsonb","timestamp","uniqueIndex","index","boolean","createInsertSchema","createSelectSchema","z","sql","check","index","integer","jsonb","pgTable","text","timestamp","uniqueIndex","varchar","createInsertSchema","createSelectSchema","z","pgTable","text","varchar","integer","jsonb","timestamp","uniqueIndex","sql","index","check","z","createInsertSchema","createSelectSchema","pgTable","text","timestamp","jsonb","boolean","integer","index","createInsertSchema","pgTable","text","jsonb","boolean","timestamp","integer","index","createInsertSchema","pgTable","text","timestamp","jsonb","boolean","integer","index","createInsertSchema","pgTable","text","timestamp","jsonb","boolean","index","createInsertSchema","pgTable","text","timestamp","jsonb","uniqueIndex","createInsertSchema","pgTable","text","jsonb","timestamp","uniqueIndex","createInsertSchema","pgTable","text","timestamp","jsonb","index","createInsertSchema","pgTable","text","jsonb","timestamp","index","createInsertSchema","pgTable","text","timestamp","jsonb","index","createInsertSchema","pgTable","text","jsonb","timestamp","index","createInsertSchema","pgTable","text","timestamp","jsonb","index","createInsertSchema","pgTable","text","jsonb","timestamp","index","createInsertSchema","pgTable","text","timestamp","index","uniqueIndex","jsonb","createInsertSchema","pgTable","text","timestamp","uniqueIndex","index","jsonb","createInsertSchema","pgTable","text","timestamp","jsonb","integer","index","uniqueIndex","sql","createInsertSchema","pgTable","text","timestamp","index","integer","jsonb","uniqueIndex","sql","createInsertSchema","pgTable","text","timestamp","jsonb","uuid","integer","index","uniqueIndex","numeric","sql","createInsertSchema","pgTable","uuid","text","jsonb","integer","numeric","timestamp","uniqueIndex","sql","index","createInsertSchema","pgTable","text","timestamp","boolean","integer","jsonb","index","uniqueIndex","createInsertSchema","z","z","pgTable","text","jsonb","boolean","integer","timestamp","uniqueIndex","index","createInsertSchema","pgTable","text","timestamp","boolean","jsonb","integer","index","uniqueIndex","createInsertSchema","pgTable","text","boolean","jsonb","timestamp","index","uniqueIndex","integer","createInsertSchema","pgTable","text","timestamp","jsonb","boolean","integer","index","createInsertSchema","pgTable","text","jsonb","boolean","timestamp","integer","index","createInsertSchema"]}