orchid-orm 1.37.5 → 1.37.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -1
- package/dist/index.js +72 -178
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +72 -178
- package/dist/index.mjs.map +1 -1
- package/dist/migrations.js +248 -521
- package/dist/migrations.js.map +1 -1
- package/dist/migrations.mjs +248 -521
- package/dist/migrations.mjs.map +1 -1
- package/package.json +5 -5
package/dist/migrations.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrations.js","sources":["../src/migrations/generate/generators/generators.utils.ts","../src/migrations/generate/generators/schemas.generator.ts","../src/migrations/generate/generators/extensions.generator.ts","../src/migrations/generate/generators/columns.generator.ts","../src/migrations/generate/generators/domains.generator.ts","../src/migrations/generate/generators/enums.generator.ts","../src/migrations/generate/generators/primaryKey.generator.ts","../src/migrations/generate/generators/indexes.generator.ts","../src/migrations/generate/generators/foreignKeys.generator.ts","../src/migrations/generate/generators/checks.generator.ts","../src/migrations/generate/generators/tables.generator.ts","../src/migrations/generate/composeMigration.ts","../src/migrations/generate/verifyMigration.ts","../src/migrations/generate/reportGeneratedMigration.ts","../src/migrations/generate/generate.ts","../src/migrations/pull/appCodeGenerators/tables.appCodeGenerator.ts","../src/migrations/pull/appCodeGenerators/dbFile.appCodeGenerator.ts","../src/migrations/pull/pull.ts","../src/migrations/patchRakeDb.ts"],"sourcesContent":["import { RakeDbAst, promptSelect, colors } from 'rake-db';\nimport { RawSQLBase } from 'orchid-core';\nimport { Adapter } from 'pqb';\nimport { AbortSignal } from '../generate';\n\nexport interface CompareExpression {\n compare: {\n inDb: string;\n inCode: (string | RawSQLBase)[];\n }[];\n\n handle(index?: number): void;\n}\n\nexport interface TableExpression extends CompareExpression {\n source: string;\n}\n\nexport const compareSqlExpressions = async (\n tableExpressions: TableExpression[],\n adapter: Adapter,\n) => {\n if (tableExpressions.length) {\n let id = 1;\n await Promise.all(\n tableExpressions.map(async ({ source, compare, handle }) => {\n const viewName = `orchidTmpView${id++}`;\n const values: unknown[] = [];\n try {\n const sql = `CREATE TEMPORARY VIEW ${viewName} AS (SELECT ${compare\n .map(\n ({ inDb, inCode }, i) =>\n `${inDb} AS \"*inDb-${i}*\", ${inCode\n .map(\n (s, j) =>\n `(${\n typeof s === 'string' ? s : s.toSQL({ values })\n }) \"*inCode-${i}-${j}*\"`,\n )\n .join(', ')}`,\n )\n .join(', ')} FROM ${source})`;\n await adapter.query({ text: sql, values });\n } catch (err) {\n handle();\n return;\n }\n\n const {\n rows: [{ v }],\n } = await adapter.query<{ v: string }>(\n `SELECT pg_get_viewdef('${viewName}') v`,\n );\n\n await adapter.query(`DROP VIEW ${viewName}`);\n\n let pos = 7;\n const rgx = /\\s+AS\\s+\"\\*(inDb-\\d+|inCode-\\d+-\\d+)\\*\",?/g;\n let match;\n let inDb = '';\n let codeI = 0;\n const matches = compare[0].inCode.map(() => true);\n while ((match = rgx.exec(v))) {\n const sql = v.slice(pos, rgx.lastIndex - match[0].length).trim();\n const arr = match[1].split('-');\n if (arr.length === 2) {\n inDb = sql;\n codeI = 0;\n } else {\n if (inDb !== sql) {\n matches[codeI] = false;\n }\n codeI++;\n }\n pos = rgx.lastIndex;\n }\n\n const firstMatching = matches.indexOf(true);\n handle(firstMatching === -1 ? undefined : firstMatching);\n }),\n );\n }\n};\n\nexport const promptCreateOrRename = (\n kind: string,\n name: string,\n drop: string[],\n verifying: boolean | undefined,\n): Promise<number> => {\n if (verifying) throw new AbortSignal();\n\n let hintPos = name.length + 4;\n for (const from of drop) {\n const value = from.length + 8 + name.length;\n if (value > hintPos) hintPos = value;\n }\n\n let max = 0;\n const add = name.length + 3;\n for (const name of drop) {\n if (name.length + add > max) {\n max = name.length + add;\n }\n }\n\n const renameMessage = `rename ${kind}`;\n\n return promptSelect({\n message: `Create or rename ${colors.blueBold(\n name,\n )} ${kind} from another ${kind}?`,\n options: [\n `${colors.greenBold('+')} ${name} ${colors.pale(\n `create ${kind}`.padStart(\n hintPos + renameMessage.length - name.length - 4,\n ' ',\n ),\n )}`,\n ...drop.map(\n (d) =>\n `${colors.yellowBold('~')} ${d} ${colors.yellowBold(\n '=>',\n )} ${name} ${colors.pale(\n renameMessage.padStart(\n hintPos + renameMessage.length - d.length - name.length - 8,\n ' ',\n ),\n )}`,\n ),\n ],\n });\n};\n\nexport const checkForColumnAddOrDrop = (\n shape: RakeDbAst.ChangeTableShape,\n key: string,\n) => {\n const item = shape[key];\n if (item) {\n return (\n item &&\n (Array.isArray(item) || item.type === 'add' || item.type === 'drop')\n );\n }\n\n for (const k in shape) {\n const item = shape[k];\n if (\n Array.isArray(item)\n ? item.some(\n (item) =>\n (item.type === 'add' || item.type === 'drop') &&\n item.item.data.name === key,\n )\n : (item.type === 'add' || item.type === 'drop') &&\n item.item.data.name === key\n ) {\n return true;\n }\n }\n\n return false;\n};\n","import { RakeDbAst, IntrospectedStructure } from 'rake-db';\nimport { promptCreateOrRename } from './generators.utils';\n\nexport const processSchemas = async (\n ast: RakeDbAst[],\n schemas: Set<string>,\n dbStructure: IntrospectedStructure,\n verifying: boolean | undefined,\n): Promise<void> => {\n const createSchemas: string[] = [];\n const dropSchemas: string[] = [];\n\n for (const schema of schemas) {\n if (!dbStructure.schemas.includes(schema)) {\n createSchemas.push(schema);\n }\n }\n\n for (const schema of dbStructure.schemas) {\n if (!schemas.has(schema) && schema !== 'public') {\n dropSchemas.push(schema);\n }\n }\n\n for (const schema of createSchemas) {\n if (dropSchemas.length) {\n const index = await promptCreateOrRename(\n 'schema',\n schema,\n dropSchemas,\n verifying,\n );\n if (index) {\n const from = dropSchemas[index - 1];\n dropSchemas.splice(index - 1, 1);\n\n renameSchemaInStructures(dbStructure.tables, from, schema);\n renameSchemaInStructures(dbStructure.views, from, schema);\n renameSchemaInStructures(dbStructure.indexes, from, schema);\n renameSchemaInStructures(dbStructure.constraints, from, schema);\n renameSchemaInStructures(dbStructure.triggers, from, schema);\n renameSchemaInStructures(dbStructure.enums, from, schema);\n renameSchemaInStructures(dbStructure.domains, from, schema);\n renameSchemaInStructures(dbStructure.collations, from, schema);\n\n for (const table of dbStructure.tables) {\n for (const column of table.columns) {\n if (column.typeSchema === from) {\n column.typeSchema = schema;\n }\n }\n }\n\n ast.push({\n type: 'renameSchema',\n from,\n to: schema,\n });\n continue;\n }\n }\n\n ast.push({\n type: 'schema',\n action: 'create',\n name: schema,\n });\n }\n\n for (const schema of dropSchemas) {\n ast.push({\n type: 'schema',\n action: 'drop',\n name: schema,\n });\n }\n};\n\nconst renameSchemaInStructures = (\n items: { schemaName: string }[],\n from: string,\n to: string,\n) => {\n for (const item of items) {\n if (item.schemaName === from) {\n item.schemaName = to;\n }\n }\n};\n","import {\n RakeDbAst,\n IntrospectedStructure,\n getSchemaAndTableFromName,\n} from 'rake-db';\nimport { DbExtension } from 'pqb';\n\ninterface Extension {\n schema?: string;\n name: string;\n version?: string;\n}\n\nexport const processExtensions = (\n ast: RakeDbAst[],\n dbStructure: IntrospectedStructure,\n currentSchema: string,\n extensions?: DbExtension[],\n) => {\n const codeExtensions = extensions?.map((ext): Extension => {\n const [schema, name] = getSchemaAndTableFromName(ext.name);\n return { schema, name, version: ext.version };\n });\n\n for (const dbExt of dbStructure.extensions) {\n if (codeExtensions) {\n let found = false;\n for (let i = 0; i < codeExtensions.length; i++) {\n const codeExt = codeExtensions[i];\n if (\n dbExt.name === codeExt.name &&\n dbExt.schemaName === (codeExt.schema ?? currentSchema) &&\n (!codeExt.version || codeExt.version === dbExt.version)\n ) {\n found = true;\n codeExtensions.splice(i, 1);\n break;\n }\n }\n\n if (found) continue;\n }\n\n ast.push({\n type: 'extension',\n action: 'drop',\n schema: dbExt.schemaName === currentSchema ? undefined : dbExt.schemaName,\n name: dbExt.name,\n version: dbExt.version,\n });\n }\n\n if (codeExtensions?.length) {\n ast.push(\n ...codeExtensions.map((ext) => ({\n type: 'extension' as const,\n action: 'create' as const,\n ...ext,\n })),\n );\n }\n};\n","import {\n RakeDbAst,\n dbColumnToAst,\n DbStructureDomainsMap,\n getDbTableColumnsChecks,\n instantiateDbColumn,\n StructureToAstCtx,\n DbStructure,\n IntrospectedStructure,\n encodeColumnDefault,\n concatSchemaAndName,\n getSchemaAndTableFromName,\n promptSelect,\n colors,\n AnyRakeDbConfig,\n} from 'rake-db';\nimport {\n Adapter,\n ArrayColumn,\n ColumnType,\n DomainColumn,\n EnumColumn,\n} from 'pqb';\nimport { promptCreateOrRename } from './generators.utils';\nimport {\n ColumnTypeBase,\n deepCompare,\n RecordUnknown,\n toSnakeCase,\n} from 'orchid-core';\nimport { ChangeTableData, CompareSql } from './tables.generator';\nimport { AbortSignal } from '../generate';\n\nexport interface TypeCastsCache {\n value?: Map<string, Set<string>>;\n}\n\ntype ColumnsToChange = Map<\n string,\n { key: string; dbName: string; column: ColumnType }\n>;\n\nexport const processColumns = async (\n adapter: Adapter,\n config: AnyRakeDbConfig,\n structureToAstCtx: StructureToAstCtx,\n dbStructure: IntrospectedStructure,\n domainsMap: DbStructureDomainsMap,\n changeTableData: ChangeTableData,\n ast: RakeDbAst[],\n currentSchema: string,\n compareSql: CompareSql,\n typeCastsCache: TypeCastsCache,\n verifying: boolean | undefined,\n) => {\n const { dbTable } = changeTableData;\n const dbColumns = Object.fromEntries(\n dbTable.columns.map((column) => [column.name, column]),\n );\n\n const { columnsToAdd, columnsToDrop, columnsToChange } = groupColumns(\n structureToAstCtx,\n dbStructure,\n domainsMap,\n dbColumns,\n changeTableData,\n );\n\n await addOrRenameColumns(\n config,\n dbStructure,\n changeTableData,\n columnsToAdd,\n columnsToDrop,\n columnsToChange,\n verifying,\n );\n\n await changeColumns(\n adapter,\n config,\n structureToAstCtx,\n dbStructure,\n domainsMap,\n ast,\n currentSchema,\n dbColumns,\n columnsToChange,\n compareSql,\n changeTableData,\n typeCastsCache,\n verifying,\n );\n\n dropColumns(changeTableData, columnsToDrop);\n};\n\ntype KeyAndColumn = { key: string; column: ColumnType };\n\nconst groupColumns = (\n structureToAstCtx: StructureToAstCtx,\n dbStructure: IntrospectedStructure,\n domainsMap: DbStructureDomainsMap,\n dbColumns: { [K: string]: DbStructure.Column },\n changeTableData: ChangeTableData,\n): {\n columnsToAdd: KeyAndColumn[];\n columnsToDrop: KeyAndColumn[];\n columnsToChange: ColumnsToChange;\n} => {\n const columnsToAdd: { key: string; column: ColumnType }[] = [];\n const columnsToDrop: { key: string; column: ColumnType }[] = [];\n const columnsToChange: ColumnsToChange = new Map();\n const columnsToChangeByDbName = new Map<string, true>();\n\n const { codeTable, dbTable, dbTableData } = changeTableData;\n const checks = getDbTableColumnsChecks(changeTableData.dbTableData);\n\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as ColumnType;\n // skip virtual columns\n if (!column.dataType) continue;\n\n const name = column.data.name ?? key;\n if (dbColumns[name]) {\n columnsToChange.set(key, { key, dbName: name, column });\n columnsToChangeByDbName.set(name, true);\n } else {\n columnsToAdd.push({ key, column });\n }\n }\n\n for (const name in dbColumns) {\n if (columnsToChangeByDbName.has(name)) continue;\n\n const [key, column] = dbColumnToAst(\n structureToAstCtx,\n dbStructure,\n domainsMap,\n dbTable.name,\n dbColumns[name],\n dbTable,\n dbTableData,\n checks,\n );\n\n columnsToDrop.push({ key, column });\n }\n\n return {\n columnsToAdd,\n columnsToDrop,\n columnsToChange,\n };\n};\n\nconst addOrRenameColumns = async (\n config: AnyRakeDbConfig,\n dbStructure: IntrospectedStructure,\n {\n dbTableData,\n schema,\n changeTableAst: { name: tableName, shape },\n }: ChangeTableData,\n columnsToAdd: KeyAndColumn[],\n columnsToDrop: KeyAndColumn[],\n columnsToChange: ColumnsToChange,\n verifying: boolean | undefined,\n) => {\n for (const { key, column } of columnsToAdd) {\n if (columnsToDrop.length) {\n const codeName = column.data.name ?? key;\n const index = await promptCreateOrRename(\n 'column',\n codeName,\n columnsToDrop.map((x) => x.key),\n verifying,\n );\n if (index) {\n const drop = columnsToDrop[index - 1];\n columnsToDrop.splice(index - 1, 1);\n\n const from = drop.column.data.name ?? drop.key;\n columnsToChange.set(from, {\n key,\n dbName: from,\n column: column.name(codeName),\n });\n\n const to = config.snakeCase ? toSnakeCase(key) : key;\n\n if (dbTableData.primaryKey) {\n renameColumn(dbTableData.primaryKey.columns, from, to);\n }\n\n for (const index of dbTableData.indexes) {\n for (const column of index.columns) {\n if ('column' in column && column.column === from) {\n column.column = to;\n }\n }\n }\n\n for (const c of dbTableData.constraints) {\n if (c.check?.columns) {\n renameColumn(c.check.columns, from, to);\n }\n if (c.references) {\n renameColumn(c.references.columns, from, to);\n }\n }\n\n for (const c of dbStructure.constraints) {\n if (\n c.references &&\n c.references.foreignSchema === schema &&\n c.references.foreignTable === tableName\n ) {\n renameColumn(c.references.foreignColumns, from, to);\n }\n }\n\n continue;\n }\n }\n\n shape[key] = {\n type: 'add',\n item: column,\n };\n }\n};\n\nconst dropColumns = (\n { changeTableAst: { shape } }: ChangeTableData,\n columnsToDrop: KeyAndColumn[],\n) => {\n for (const { key, column } of columnsToDrop) {\n shape[key] = {\n type: 'drop',\n item: column,\n };\n }\n};\n\nconst changeColumns = async (\n adapter: Adapter,\n config: AnyRakeDbConfig,\n structureToAstCtx: StructureToAstCtx,\n dbStructure: IntrospectedStructure,\n domainsMap: DbStructureDomainsMap,\n ast: RakeDbAst[],\n currentSchema: string,\n dbColumns: { [K: string]: DbStructure.Column },\n columnsToChange: ColumnsToChange,\n compareSql: CompareSql,\n changeTableData: ChangeTableData,\n typeCastsCache: TypeCastsCache,\n verifying: boolean | undefined,\n) => {\n for (const [\n key,\n { key: codeKey, dbName, column: codeColumn },\n ] of columnsToChange) {\n const dbColumnStructure = dbColumns[dbName];\n\n const dbColumn = instantiateDbColumn(\n structureToAstCtx,\n dbStructure,\n domainsMap,\n dbColumnStructure,\n );\n\n const action = await compareColumns(\n adapter,\n domainsMap,\n ast,\n currentSchema,\n compareSql,\n changeTableData,\n typeCastsCache,\n verifying,\n key,\n dbName,\n dbColumn,\n codeColumn,\n );\n\n if (action === 'change') {\n changeColumn(changeTableData, key, dbName, dbColumn, codeColumn);\n } else if (action === 'recreate') {\n changeTableData.changeTableAst.shape[key] = [\n {\n type: 'drop',\n item: dbColumn,\n },\n {\n type: 'add',\n item: codeColumn,\n },\n ];\n } else if (action !== 'recreate') {\n const to = codeColumn.data.name ?? codeKey;\n if (dbName !== to) {\n changeTableData.changeTableAst.shape[\n config.snakeCase\n ? dbName === toSnakeCase(codeKey)\n ? codeKey\n : dbName\n : dbName\n ] = {\n type: 'rename',\n name: config.snakeCase\n ? to === toSnakeCase(codeKey)\n ? codeKey\n : to\n : to,\n };\n }\n }\n }\n};\n\nconst compareColumns = async (\n adapter: Adapter,\n domainsMap: DbStructureDomainsMap,\n ast: RakeDbAst[],\n currentSchema: string,\n compareSql: CompareSql,\n changeTableData: ChangeTableData,\n typeCastsCache: TypeCastsCache,\n verifying: boolean | undefined,\n key: string,\n dbName: string,\n dbColumn: ColumnType,\n codeColumn: ColumnType,\n): Promise<'change' | 'recreate' | undefined> => {\n const dbType = getColumnDbType(dbColumn, currentSchema);\n const codeType = getColumnDbType(codeColumn, currentSchema);\n\n if (dbColumn instanceof ArrayColumn && codeColumn instanceof ArrayColumn) {\n dbColumn = dbColumn.data.item;\n codeColumn = codeColumn.data.item;\n }\n\n if (dbType !== codeType) {\n let typeCasts = typeCastsCache.value;\n if (!typeCasts) {\n const { rows } = await adapter.arrays(`SELECT s.typname, t.typname\nFROM pg_cast\nJOIN pg_type AS s ON s.oid = castsource\nJOIN pg_type AS t ON t.oid = casttarget`);\n\n const directTypeCasts = new Map<string, Set<string>>();\n for (const [source, target] of rows) {\n const set = directTypeCasts.get(source);\n if (set) {\n set.add(target);\n } else {\n directTypeCasts.set(source, new Set([target]));\n }\n }\n\n typeCasts = new Map<string, Set<string>>();\n for (const [type, directSet] of directTypeCasts.entries()) {\n const set = new Set<string>(directSet);\n typeCasts.set(type, set);\n\n for (const subtype of directSet) {\n const subset = directTypeCasts.get(subtype);\n if (subset) {\n for (const type of subset) {\n set.add(type);\n }\n }\n }\n }\n\n typeCastsCache.value = typeCasts;\n }\n\n const dbBaseType =\n dbColumn instanceof DomainColumn\n ? domainsMap[dbColumn.dataType]?.dataType\n : dbType;\n\n const codeBaseType =\n codeColumn instanceof DomainColumn\n ? domainsMap[codeColumn.dataType]?.dataType\n : codeType;\n\n if (!typeCasts.get(dbBaseType)?.has(codeBaseType)) {\n if (\n !(dbColumn instanceof EnumColumn) ||\n !(codeColumn instanceof EnumColumn) ||\n !deepCompare(dbColumn.options, codeColumn.options)\n ) {\n if (verifying) throw new AbortSignal();\n\n const tableName = concatSchemaAndName(changeTableData.changeTableAst);\n const abort = await promptSelect({\n message: `Cannot cast type of ${tableName}'s column ${key} from ${dbType} to ${codeType}`,\n options: [\n `${colors.yellowBold(\n `-/+`,\n )} recreate the column, existing data will be ${colors.red(\n 'lost',\n )}`,\n `write migration manually`,\n ],\n });\n if (abort) {\n throw new AbortSignal();\n }\n\n dbColumn.data.name = codeColumn.data.name;\n return 'recreate';\n }\n }\n\n return 'change';\n }\n\n const dbData = dbColumn.data as unknown as RecordUnknown;\n const codeData = codeColumn.data as unknown as RecordUnknown;\n\n for (const key of ['isNullable', 'comment']) {\n if (dbData[key] !== codeData[key]) {\n return 'change';\n }\n }\n\n for (const key of [\n 'maxChars',\n 'collation',\n 'compression',\n 'numericPrecision',\n 'numericScale',\n 'dateTimePrecision',\n ]) {\n // Check if key in codeData so that default precision/scale values for such columns as integer aren't counted.\n // If column supports precision/scale, it should have it listed in the data, even if it's undefined.\n if (key in codeData && dbData[key] !== codeData[key]) {\n return 'change';\n }\n }\n\n if (\n !deepCompare(\n dbData.identity,\n codeData.identity\n ? {\n always: false,\n start: 1,\n increment: 1,\n cache: 1,\n cycle: false,\n ...(codeData.identity ?? {}),\n }\n : undefined,\n )\n ) {\n return 'change';\n }\n\n if (\n dbData.default !== undefined &&\n dbData.default !== null &&\n codeData.default !== undefined &&\n codeData.default !== null\n ) {\n const valuesBeforeLen = compareSql.values.length;\n const dbDefault = encodeColumnDefault(\n dbData.default,\n compareSql.values,\n dbColumn,\n ) as string;\n const dbValues = compareSql.values.slice(valuesBeforeLen);\n\n const codeDefault = encodeColumnDefault(\n codeData.default,\n compareSql.values,\n codeColumn,\n ) as string;\n const codeValues = compareSql.values.slice(valuesBeforeLen);\n\n if (\n dbValues.length !== codeValues.length ||\n (dbValues.length &&\n JSON.stringify(dbValues) !== JSON.stringify(codeValues))\n ) {\n compareSql.values.length = valuesBeforeLen;\n return 'change';\n } else if (dbDefault !== codeDefault && dbDefault !== `(${codeDefault})`) {\n compareSql.expressions.push({\n inDb: dbDefault,\n inCode: codeDefault,\n change: () => {\n changeColumn(changeTableData, key, dbName, dbColumn, codeColumn);\n if (!changeTableData.pushedAst) {\n changeTableData.pushedAst = true;\n ast.push(changeTableData.changeTableAst);\n }\n },\n });\n }\n }\n\n return;\n};\n\nconst changeColumn = (\n changeTableData: ChangeTableData,\n key: string,\n dbName: string,\n dbColumn: ColumnType,\n codeColumn: ColumnType,\n) => {\n dbColumn.data.as = codeColumn.data.as = undefined;\n\n const simpleCodeColumn = Object.create(codeColumn);\n simpleCodeColumn.data = {\n ...codeColumn.data,\n primaryKey: undefined,\n indexes: undefined,\n foreignKeys: undefined,\n check: undefined,\n };\n\n changeTableData.changingColumns[dbName] = {\n from: dbColumn,\n to: simpleCodeColumn,\n };\n\n changeTableData.changeTableAst.shape[key] = {\n type: 'change',\n from: { column: dbColumn },\n to: { column: simpleCodeColumn },\n };\n};\n\nexport const getColumnDbType = (\n column: ColumnTypeBase,\n currentSchema: string,\n) => {\n if (column instanceof EnumColumn) {\n const [schema = currentSchema, name] = getSchemaAndTableFromName(\n column.enumName,\n );\n return (column.enumName = `${schema}.${name}`);\n } else if (column instanceof ArrayColumn) {\n return column.data.item.dataType + '[]'.repeat(column.data.arrayDims);\n } else {\n return column.dataType;\n }\n};\n\nconst renameColumn = (columns: string[], from: string, to: string) => {\n for (let i = 0; i < columns.length; i++) {\n if (columns[i] === from) {\n columns[i] = to;\n }\n }\n};\n","import { Adapter, ArrayColumn, ColumnType, RawSQL } from 'pqb';\nimport {\n RakeDbAst,\n getSchemaAndTableFromName,\n DbStructure,\n IntrospectedStructure,\n DbStructureDomainsMap,\n instantiateDbColumn,\n StructureToAstCtx,\n} from 'rake-db';\nimport {\n ColumnDataCheckBase,\n deepCompare,\n TemplateLiteralArgs,\n} from 'orchid-core';\nimport { getColumnDbType } from './columns.generator';\nimport {\n CompareExpression,\n compareSqlExpressions,\n TableExpression,\n} from './generators.utils';\n\ninterface ComparableDomainCompare\n extends Omit<DbStructure.Domain, 'schemaName' | 'name'> {\n hasDefault: boolean;\n hasCheck: boolean;\n}\n\ninterface ComparableDomain {\n schemaName: string;\n name: string;\n column: ColumnType;\n compare: ComparableDomainCompare;\n}\n\nexport interface CodeDomain {\n schemaName: string;\n name: string;\n column: ColumnType;\n}\n\nexport const processDomains = async (\n ast: RakeDbAst[],\n adapter: Adapter,\n structureToAstCtx: StructureToAstCtx,\n domainsMap: DbStructureDomainsMap,\n dbStructure: IntrospectedStructure,\n currentSchema: string,\n domains: CodeDomain[],\n) => {\n const codeDomains: ComparableDomain[] = [];\n if (domains) {\n for (const { schemaName, name, column } of domains) {\n codeDomains.push(\n makeComparableDomain(currentSchema, schemaName, name, column),\n );\n }\n }\n\n const tableExpressions: TableExpression[] = [];\n const holdCodeDomains = new Set<ComparableDomain>();\n\n for (const domain of dbStructure.domains) {\n const dbColumn = instantiateDbColumn(\n structureToAstCtx,\n dbStructure,\n domainsMap,\n {\n // not destructuring `domain` because need to ignore `numericPrecision`, `numericScale`, etc.,\n // that are loaded from db, but not defined in the code\n schemaName: domain.typeSchema,\n tableName: 'N/A',\n name: domain.name,\n typeSchema: domain.typeSchema,\n type: domain.type,\n arrayDims: domain.arrayDims,\n default: domain.default,\n isNullable: domain.isNullable,\n collate: domain.collate,\n maxChars: domain.maxChars,\n typmod: -1,\n },\n );\n\n if (domain.check) {\n dbColumn.data.check = {\n sql: new RawSQL([[domain.check]] as unknown as TemplateLiteralArgs),\n };\n }\n\n const dbDomain = makeComparableDomain(\n currentSchema,\n domain.schemaName,\n domain.name,\n dbColumn,\n );\n\n const found = codeDomains.filter((codeDomain) =>\n deepCompare(dbDomain.compare, codeDomain.compare),\n );\n\n if ((domain.default || domain.check) && found.length) {\n for (const codeDomain of found) {\n holdCodeDomains.add(codeDomain);\n }\n\n const compare: CompareExpression['compare'] = [];\n pushCompare(compare, domain, found, 'default');\n pushCompare(compare, domain, found, 'check');\n\n const source = `(VALUES (NULL::${getColumnDbType(\n dbColumn,\n currentSchema,\n )})) t(value)`;\n\n tableExpressions.push({\n compare,\n source,\n handle(index) {\n const codeDomain = index === undefined ? undefined : found[index];\n if (!codeDomain) {\n ast.push(dropAst(dbDomain));\n } else {\n holdCodeDomains.delete(codeDomain);\n }\n },\n });\n } else if (found.length) {\n let i = codeDomains.findIndex(\n (codeDomain) =>\n codeDomain.name === dbDomain.name &&\n codeDomain.schemaName === dbDomain.schemaName,\n );\n if (i === -1) {\n i = 0;\n const first = found[0];\n ast.push({\n type: 'renameType',\n kind: 'DOMAIN',\n fromSchema: dbDomain.schemaName,\n from: dbDomain.name,\n toSchema: first.schemaName,\n to: first.name,\n });\n }\n\n codeDomains.splice(i, 1);\n } else {\n ast.push(dropAst(dbDomain));\n }\n }\n\n for (const codeDomain of codeDomains) {\n if (!holdCodeDomains.has(codeDomain)) {\n ast.push(createAst(codeDomain));\n }\n }\n\n if (tableExpressions.length) {\n await compareSqlExpressions(tableExpressions, adapter);\n\n if (holdCodeDomains.size) {\n for (const codeDomain of holdCodeDomains.keys()) {\n ast.push(createAst(codeDomain));\n }\n }\n }\n};\n\nconst makeComparableDomain = (\n currentSchema: string,\n schemaName: string,\n name: string,\n column: ColumnType,\n): ComparableDomain => {\n let arrayDims = 0;\n const isNullable = column.data.isNullable ?? false;\n let inner = column;\n while (inner instanceof ArrayColumn) {\n inner = inner.data.item;\n arrayDims++;\n }\n const fullType = getColumnDbType(inner, currentSchema);\n const [typeSchema = 'pg_catalog', type] = getSchemaAndTableFromName(fullType);\n\n return {\n schemaName,\n name,\n column,\n compare: {\n type,\n typeSchema,\n arrayDims,\n isNullable,\n maxChars: inner.data.maxChars,\n numericPrecision: inner.data.numericPrecision,\n numericScale: inner.data.numericScale,\n dateTimePrecision: inner.data.dateTimePrecision,\n collate: column.data.collate,\n hasDefault: column.data.default !== undefined,\n hasCheck: column.data.check !== undefined,\n },\n };\n};\n\nconst pushCompare = (\n compare: CompareExpression['compare'],\n domain: DbStructure.Domain,\n found: ComparableDomain[],\n key: 'default' | 'check',\n) => {\n const inDb = domain[key];\n if (inDb) {\n compare.push({\n inDb,\n inCode: found.map((codeDomain) => {\n const value = codeDomain.column.data[key];\n if ('sql' in (value as ColumnDataCheckBase)) {\n return (value as ColumnDataCheckBase).sql;\n }\n return value as string;\n }),\n });\n }\n};\n\nconst dropAst = (dbDomain: ComparableDomain): RakeDbAst.Domain => ({\n type: 'domain',\n action: 'drop',\n schema: dbDomain.schemaName,\n name: dbDomain.name,\n baseType: dbDomain.column,\n});\n\nconst createAst = (codeDomain: ComparableDomain): RakeDbAst.Domain => ({\n type: 'domain',\n action: 'create',\n schema: codeDomain.schemaName,\n name: codeDomain.name,\n baseType: codeDomain.column,\n});\n","import { DbStructure, IntrospectedStructure, RakeDbAst } from 'rake-db';\nimport { promptCreateOrRename } from './generators.utils';\n\nexport interface EnumItem {\n schema?: string;\n name: string;\n values: [string, ...string[]];\n}\n\nexport const processEnums = async (\n ast: RakeDbAst[],\n enums: Map<string, EnumItem>,\n dbStructure: IntrospectedStructure,\n currentSchema: string,\n verifying: boolean | undefined,\n): Promise<void> => {\n const createEnums: EnumItem[] = [];\n const dropEnums: DbStructure.Enum[] = [];\n\n for (const [, codeEnum] of enums) {\n const { schema = currentSchema, name } = codeEnum;\n const dbEnum = dbStructure.enums.find(\n (x) => x.schemaName === schema && x.name === name,\n );\n if (!dbEnum) {\n createEnums.push(codeEnum);\n }\n }\n\n for (const dbEnum of dbStructure.enums) {\n const codeEnum = enums.get(`${dbEnum.schemaName}.${dbEnum.name}`);\n if (codeEnum) {\n changeEnum(ast, dbEnum, codeEnum);\n continue;\n }\n\n const i = createEnums.findIndex((x) => x.name === dbEnum.name);\n if (i !== -1) {\n const codeEnum = createEnums[i];\n createEnums.splice(i, 1);\n const fromSchema = dbEnum.schemaName;\n const toSchema = codeEnum.schema ?? currentSchema;\n\n renameColumnsTypeSchema(dbStructure, fromSchema, toSchema);\n\n ast.push({\n type: 'renameType',\n kind: 'TYPE',\n fromSchema,\n from: dbEnum.name,\n toSchema,\n to: dbEnum.name,\n });\n\n changeEnum(ast, dbEnum, codeEnum);\n\n continue;\n }\n\n dropEnums.push(dbEnum);\n }\n\n for (const codeEnum of createEnums) {\n if (dropEnums.length) {\n const index = await promptCreateOrRename(\n 'enum',\n codeEnum.name,\n dropEnums.map((x) => x.name),\n verifying,\n );\n if (index) {\n const dbEnum = dropEnums[index - 1];\n dropEnums.splice(index - 1, 1);\n\n const fromSchema = dbEnum.schemaName;\n const from = dbEnum.name;\n const toSchema = codeEnum.schema ?? currentSchema;\n const to = codeEnum.name;\n\n if (fromSchema !== toSchema) {\n renameColumnsTypeSchema(dbStructure, fromSchema, toSchema);\n }\n\n for (const table of dbStructure.tables) {\n for (const column of table.columns) {\n if (column.type === from) {\n column.type = to;\n }\n }\n }\n\n ast.push({\n type: 'renameType',\n kind: 'TYPE',\n fromSchema,\n from,\n toSchema,\n to,\n });\n\n changeEnum(ast, dbEnum, codeEnum);\n\n continue;\n }\n }\n\n ast.push({\n type: 'enum',\n action: 'create',\n ...codeEnum,\n });\n }\n\n for (const dbEnum of dropEnums) {\n ast.push({\n type: 'enum',\n action: 'drop',\n schema: dbEnum.schemaName,\n name: dbEnum.name,\n values: dbEnum.values,\n });\n }\n};\n\nconst changeEnum = (\n ast: RakeDbAst[],\n dbEnum: DbStructure.Enum,\n codeEnum: EnumItem,\n) => {\n const { values: dbValues } = dbEnum;\n const { values: codeValues, schema, name } = codeEnum;\n\n if (dbValues.length < codeValues.length) {\n if (!dbValues.some((value, i) => value !== codeValues[i])) {\n ast.push({\n type: 'enumValues',\n action: 'add',\n schema,\n name,\n values: codeValues.slice(-(codeValues.length - dbValues.length)),\n });\n return;\n }\n } else if (dbValues.length > codeValues.length) {\n if (!codeValues.some((value, i) => value !== dbValues[i])) {\n ast.push({\n type: 'enumValues',\n action: 'drop',\n schema,\n name,\n values: dbValues.slice(-(dbValues.length - codeValues.length)),\n });\n return;\n }\n } else if (!dbValues.some((value, i) => value !== codeValues[i])) {\n return;\n }\n\n ast.push({\n type: 'changeEnumValues',\n schema,\n name,\n fromValues: dbValues,\n toValues: codeValues,\n });\n};\n\nconst renameColumnsTypeSchema = (\n dbStructure: IntrospectedStructure,\n from: string,\n to: string,\n) => {\n for (const table of dbStructure.tables) {\n for (const column of table.columns) {\n if (column.typeSchema === from) {\n column.typeSchema = to;\n }\n }\n }\n};\n","import { AnyRakeDbConfig } from 'rake-db';\nimport { ColumnType } from 'pqb';\nimport { ChangeTableData } from './tables.generator';\nimport { checkForColumnAddOrDrop } from './generators.utils';\nimport { toArray, toSnakeCase } from 'orchid-core';\n\nexport const processPrimaryKey = (\n config: AnyRakeDbConfig,\n changeTableData: ChangeTableData,\n) => {\n const { codeTable } = changeTableData;\n\n const columnsPrimaryKey: { key: string; name: string }[] = [];\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as ColumnType;\n if (column.data.primaryKey) {\n columnsPrimaryKey.push({ key, name: column.data.name ?? key });\n }\n }\n\n changePrimaryKey(config, columnsPrimaryKey, changeTableData);\n renamePrimaryKey(changeTableData);\n};\n\nconst changePrimaryKey = (\n config: AnyRakeDbConfig,\n columnsPrimaryKey: { key: string; name: string }[],\n {\n codeTable,\n dbTableData: { primaryKey: dbPrimaryKey },\n changeTableAst: { shape, add, drop },\n changingColumns,\n }: ChangeTableData,\n) => {\n const tablePrimaryKey = codeTable.internal.tableData.primaryKey;\n const primaryKey = [\n ...new Set([\n ...columnsPrimaryKey,\n ...((config.snakeCase\n ? tablePrimaryKey?.columns.map((key) => ({\n key,\n name: toSnakeCase(key),\n }))\n : tablePrimaryKey?.columns.map((key) => ({ key, name: key }))) ?? []),\n ]),\n ];\n\n if (\n dbPrimaryKey &&\n primaryKey.length === dbPrimaryKey.columns.length &&\n !primaryKey.some(\n ({ name }) => !dbPrimaryKey.columns.some((dbName) => name === dbName),\n )\n ) {\n if (primaryKey.length === 1) {\n const { key } = primaryKey[0];\n const changes = shape[key] && toArray(shape[key]);\n if (changes) {\n for (const change of changes) {\n if (change.type !== 'change') continue;\n\n if (change.from.column) {\n change.from.column.data.primaryKey = undefined;\n }\n\n if (change.to.column) {\n const column = Object.create(change.to.column);\n column.data = { ...column.data, primaryKey: undefined };\n change.to.column = column;\n }\n }\n }\n }\n return;\n }\n\n const toDrop = dbPrimaryKey?.columns.filter(\n (key) => !checkForColumnAddOrDrop(shape, key),\n );\n if (toDrop?.length) {\n if (toDrop.length === 1 && changingColumns[toDrop[0]]) {\n const column = changingColumns[toDrop[0]];\n column.from.data.primaryKey =\n dbPrimaryKey?.name ?? (true as unknown as string);\n } else {\n drop.primaryKey = { columns: toDrop, name: dbPrimaryKey?.name };\n }\n }\n\n const toAdd = primaryKey.filter(\n ({ key }) => !checkForColumnAddOrDrop(shape, key),\n );\n if (toAdd.length) {\n if (toAdd.length === 1 && changingColumns[toAdd[0].name]) {\n const column = changingColumns[toAdd[0].name];\n column.to.data.primaryKey =\n tablePrimaryKey?.name ?? (true as unknown as string);\n } else {\n add.primaryKey = {\n columns: toAdd.map((c) => c.key),\n name: tablePrimaryKey?.name,\n };\n }\n }\n};\n\nconst renamePrimaryKey = ({\n codeTable,\n dbTableData: { primaryKey: dbPrimaryKey },\n schema,\n delayedAst,\n}: ChangeTableData) => {\n const tablePrimaryKey = codeTable.internal.tableData.primaryKey;\n if (\n dbPrimaryKey &&\n tablePrimaryKey &&\n dbPrimaryKey?.name !== tablePrimaryKey?.name\n ) {\n delayedAst.push({\n type: 'renameTableItem',\n kind: 'CONSTRAINT',\n tableSchema: schema,\n tableName: codeTable.table,\n from: dbPrimaryKey.name ?? `${codeTable.table}_pkey`,\n to: tablePrimaryKey.name ?? `${codeTable}_pkey`,\n });\n }\n};\n","import { AnyRakeDbConfig, RakeDbAst, getIndexName, DbStructure } from 'rake-db';\nimport { ColumnType, SearchWeight, TableData } from 'pqb';\nimport {\n deepCompare,\n MaybeArray,\n RecordUnknown,\n toArray,\n toSnakeCase,\n} from 'orchid-core';\nimport { ChangeTableData } from './tables.generator';\nimport { checkForColumnAddOrDrop, CompareExpression } from './generators.utils';\n\ninterface CodeIndex extends TableData.Index {\n columnKeys: TableData.Index.ColumnOrExpressionOptions[];\n includeKeys?: MaybeArray<string>;\n}\n\ninterface ComparableIndex {\n name?: string;\n using?: string;\n unique?: boolean;\n include?: string[];\n nullsNotDistinct?: boolean;\n tablespace?: string;\n tsVector?: boolean;\n language?: string;\n languageColumn?: string;\n columns: {\n column?: string;\n collate?: string;\n opclass?: string;\n order?: string;\n weight?: SearchWeight;\n hasExpression: boolean;\n }[];\n hasWith: boolean;\n hasWhere: boolean;\n hasExpression: boolean;\n columnKeys?: string[];\n includeKeys?: string[];\n}\n\nexport const processIndexes = (\n config: AnyRakeDbConfig,\n changeTableData: ChangeTableData,\n ast: RakeDbAst[],\n compareExpressions: CompareExpression[],\n) => {\n const codeIndexes = collectCodeIndexes(config, changeTableData);\n const codeComparableIndexes = collectCodeComparableIndexes(\n config,\n codeIndexes,\n );\n\n // to skip indexes without SQL from being added when they are matched with already existing indexes\n const skipCodeIndexes = new Map<number, boolean>();\n\n // to skip indexes with SQL from being added while their SQL is being asynchronously compared with existing indexes\n const holdCodeIndexes = new Map<TableData.Index, boolean>();\n\n // counter for async SQL comparisons that are in progress\n let wait = 0;\n\n const {\n changeTableAst: { shape },\n } = changeTableData;\n for (const dbIndex of changeTableData.dbTableData.indexes) {\n const hasAddedOrDroppedColumn = dbIndex.columns.some(\n (column) =>\n 'column' in column && checkForColumnAddOrDrop(shape, column.column),\n );\n if (hasAddedOrDroppedColumn) continue;\n\n normalizeIndex(dbIndex);\n\n const { found, rename, foundAndHasSql } = findMatchingIndex(\n dbIndex,\n codeComparableIndexes,\n codeIndexes,\n skipCodeIndexes,\n changeTableData.codeTable.table,\n config,\n );\n\n const { columns: dbColumns } = dbIndex;\n\n if (!foundAndHasSql) {\n handleIndexChange(\n changeTableData,\n dbIndex,\n dbColumns,\n found[0],\n rename[0],\n );\n continue;\n }\n\n for (const codeIndex of found) {\n holdCodeIndexes.set(codeIndex, true);\n }\n\n const compare: CompareExpression['compare'] = [];\n for (let i = 0; i < dbIndex.columns.length; i++) {\n const column = dbIndex.columns[i];\n if (!('expression' in column)) continue;\n\n compare.push({\n inDb: column.expression,\n inCode: found.map(\n (index) => (index.columns[i] as { expression: string }).expression,\n ),\n });\n }\n\n if (dbIndex.with) {\n compare.push({\n inDb: dbIndex.with,\n inCode: found.map((index) => index.options.with as string),\n });\n }\n\n if (dbIndex.where) {\n compare.push({\n inDb: dbIndex.where,\n inCode: found.map((index) => index.options.where as string),\n });\n }\n\n wait++;\n compareExpressions.push({\n compare,\n handle(index) {\n const codeIndex = index === undefined ? undefined : found[index];\n\n handleIndexChange(\n changeTableData,\n dbIndex,\n dbColumns,\n codeIndex,\n index === undefined ? undefined : rename[index],\n );\n\n if (codeIndex) {\n holdCodeIndexes.delete(codeIndex);\n }\n\n if (!--wait && holdCodeIndexes.size) {\n addIndexes(changeTableData, [...holdCodeIndexes.keys()]);\n\n if (!changeTableData.pushedAst) {\n changeTableData.pushedAst = true;\n ast.push(changeTableData.changeTableAst);\n }\n }\n },\n });\n }\n\n const indexesToAdd = codeIndexes.filter(\n (index, i) => !skipCodeIndexes.has(i) && !holdCodeIndexes.has(index),\n );\n if (indexesToAdd.length) {\n addIndexes(\n changeTableData,\n indexesToAdd.map((x) => ({\n ...x,\n columns: x.columnKeys,\n columnNames: x.columns,\n options: x.options.include\n ? { ...x.options, include: x.includeKeys }\n : x.options,\n })),\n );\n }\n};\n\nconst collectCodeIndexes = (\n config: AnyRakeDbConfig,\n { codeTable, changeTableAst: { shape } }: ChangeTableData,\n): CodeIndex[] => {\n const codeIndexes: CodeIndex[] = [];\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as ColumnType;\n if (!column.data.indexes) continue;\n\n const name = column.data.name ?? key;\n if (checkForColumnAddOrDrop(shape, name)) continue;\n\n codeIndexes.push(\n ...column.data.indexes.map(\n ({\n options: { collate, opclass, order, weight, ...options },\n ...index\n }) => ({\n columns: [\n {\n collate,\n opclass,\n order,\n weight,\n column: name,\n },\n ],\n ...index,\n options: options.include\n ? config.snakeCase\n ? {\n ...options,\n include: toArray(options.include).map(toSnakeCase),\n }\n : options\n : options,\n columnKeys: [{ collate, opclass, order, weight, column: key }],\n includeKeys: options.include,\n }),\n ),\n );\n }\n\n if (codeTable.internal.tableData.indexes) {\n codeIndexes.push(\n ...codeTable.internal.tableData.indexes.map((x) => ({\n ...x,\n columns: config.snakeCase\n ? x.columns.map((c) =>\n 'column' in c ? { ...c, column: toSnakeCase(c.column) } : c,\n )\n : x.columns,\n columnKeys: x.columns,\n options:\n x.options.include && config.snakeCase\n ? {\n ...x.options,\n include: toArray(x.options.include).map(toSnakeCase),\n }\n : x.options,\n includeKeys: x.options.include,\n })),\n );\n }\n\n return codeIndexes;\n};\n\nconst collectCodeComparableIndexes = (\n config: AnyRakeDbConfig,\n codeIndexes: CodeIndex[],\n): ComparableIndex[] => {\n return codeIndexes.map((codeIndex) => {\n normalizeIndex(codeIndex.options);\n\n return indexToComparable({\n ...codeIndex.options,\n include:\n codeIndex.options.include === undefined\n ? undefined\n : config.snakeCase\n ? toArray(codeIndex.options.include).map(toSnakeCase)\n : toArray(codeIndex.options.include),\n columns: codeIndex.columns,\n name: codeIndex.name,\n columnKeys: codeIndex.columnKeys,\n includeKeys: codeIndex.includeKeys,\n });\n });\n};\n\nconst normalizeIndex = (index: {\n using?: string;\n unique?: boolean;\n nullsNotDistinct?: boolean;\n}) => {\n if (index.using === 'btree') index.using = undefined;\n if (!index.unique) index.unique = undefined;\n if (index.nullsNotDistinct === false) index.nullsNotDistinct = undefined;\n};\n\nconst indexToComparable = (\n index: TableData.Index.Options & {\n columns: DbStructure.Index['columns'];\n name?: string;\n columnKeys?: TableData.Index.ColumnOrExpressionOptions[];\n includeKeys?: MaybeArray<string>;\n },\n) => {\n let hasExpression = false;\n const columns = index.columns.map((column) => {\n const result = {\n ...column,\n expression: undefined,\n hasExpression: 'expression' in column,\n };\n if (result.hasExpression) hasExpression = true;\n return result;\n });\n\n return {\n ...index,\n schemaName: undefined,\n tableName: undefined,\n with: undefined,\n hasWith: !!index.with,\n where: undefined,\n hasWhere: !!index.where,\n columns,\n hasExpression,\n } as ComparableIndex;\n};\n\ninterface IndexChange {\n found: TableData.Index[];\n rename: (string | undefined)[];\n}\n\nconst findMatchingIndex = (\n dbIndex: DbStructure.Index,\n codeComparableIndexes: ComparableIndex[],\n codeIndexes: TableData.Index[],\n skipCodeIndexes: Map<number, boolean>,\n tableName: string,\n config: AnyRakeDbConfig,\n) => {\n const dbComparableIndex = indexToComparable(dbIndex);\n\n const { found, rename } = findMatchingIndexWithoutSql(\n dbComparableIndex,\n codeComparableIndexes,\n codeIndexes,\n skipCodeIndexes,\n tableName,\n config,\n );\n\n const foundAndHasSql = found.length && checkIfIndexHasSql(dbComparableIndex);\n\n return { found, rename, foundAndHasSql };\n};\n\nconst findMatchingIndexWithoutSql = (\n dbIndex: ComparableIndex,\n codeComparableIndexes: ComparableIndex[],\n codeIndexes: TableData.Index[],\n skipCodeIndexes: Map<number, boolean>,\n tableName: string,\n config: AnyRakeDbConfig,\n): IndexChange => {\n const found: TableData.Index[] = [];\n const rename: (string | undefined)[] = [];\n\n const { columns: dbColumns, ...dbIndexWithoutColumns } = dbIndex;\n\n for (let i = 0; i < codeComparableIndexes.length; i++) {\n if (skipCodeIndexes.has(i)) continue;\n\n const { columns: codeColumns, ...codeIndex } = codeComparableIndexes[i];\n if (\n dbColumns.length === codeColumns.length &&\n !dbColumns.some((dbColumn, i) => !deepCompare(dbColumn, codeColumns[i]))\n ) {\n let a: RecordUnknown = dbIndexWithoutColumns;\n let b = codeIndex;\n const codeName = b.name ?? getIndexName(tableName, dbColumns);\n if (a.name !== b.name) {\n a = { ...a, name: undefined };\n b = {\n ...b,\n name: undefined,\n columnKeys: undefined,\n includeKeys: undefined,\n };\n if (a.language && !b.language) {\n b.language = config.language ?? 'english';\n }\n\n if (deepCompare(a, b)) {\n found.push(codeIndexes[i]);\n rename.push(\n dbIndexWithoutColumns.name !== codeName ? codeName : undefined,\n );\n }\n } else {\n const {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n columnKeys,\n includeKeys,\n ...codeIndexWithoutKeys\n } = codeIndex;\n if (deepCompare(dbIndexWithoutColumns, codeIndexWithoutKeys)) {\n found.push(codeIndexes[i]);\n rename.push(undefined);\n }\n }\n\n if (found.length && !checkIfIndexHasSql(codeIndex)) {\n skipCodeIndexes.set(i, true);\n }\n }\n }\n\n return { found, rename };\n};\n\nconst checkIfIndexHasSql = (\n index: Pick<ComparableIndex, 'hasWith' | 'hasWhere' | 'hasExpression'>,\n) => index.hasWith || index.hasWhere || index.hasExpression;\n\nconst handleIndexChange = (\n {\n changeTableAst,\n schema,\n codeTable,\n changingColumns,\n delayedAst,\n }: ChangeTableData,\n dbIndex: DbStructure.Index,\n dbColumns: DbStructure.Index['columns'],\n found?: TableData.Index,\n rename?: string,\n) => {\n if (!found) {\n const indexName =\n dbIndex.name === getIndexName(changeTableAst.name, dbColumns)\n ? undefined\n : dbIndex.name;\n\n if (dbColumns.length === 1 && 'column' in dbColumns[0]) {\n const column = changingColumns[dbColumns[0].column];\n if (column) {\n (column.from.data.indexes ??= []).push({\n options: dbIndex,\n name: indexName,\n });\n return;\n }\n }\n\n (changeTableAst.drop.indexes ??= []).push({\n columns: dbColumns,\n options: dbIndex,\n name: indexName,\n });\n } else if (rename) {\n delayedAst.push({\n type: 'renameTableItem',\n kind: 'INDEX',\n tableSchema: schema,\n tableName: codeTable.table,\n from: dbIndex.name,\n to: rename,\n });\n }\n};\n\ninterface IndexWithMaybeColumnNames extends TableData.Index {\n columnNames?: TableData.Index.ColumnOrExpressionOptions[];\n}\n\nconst addIndexes = (\n { changeTableAst, changingColumns }: ChangeTableData,\n add: IndexWithMaybeColumnNames[],\n) => {\n const indexes = (changeTableAst.add.indexes ??= []);\n for (const index of add) {\n if (index.columns.length === 1 && 'column' in index.columns[0]) {\n const column =\n changingColumns[\n ((index.columnNames || index.columns)[0] as { column: string }).column\n ];\n if (column) {\n (column.to.data.indexes ??= []).push(index);\n continue;\n }\n }\n\n indexes.push(index);\n }\n};\n","import {\n RakeDbAst,\n DbStructure,\n concatSchemaAndName,\n getSchemaAndTableFromName,\n getConstraintName,\n AnyRakeDbConfig,\n} from 'rake-db';\nimport { ColumnType, TableData } from 'pqb';\nimport { ChangeTableData, TableShapes } from './tables.generator';\nimport { deepCompare, toSnakeCase } from 'orchid-core';\nimport { checkForColumnAddOrDrop } from './generators.utils';\n\ninterface Constraint extends TableData.Constraint {\n references: TableData.References;\n}\n\ninterface CodeForeignKey {\n references: DbStructure.References;\n codeConstraint: Constraint;\n}\n\ninterface ReferencesWithStringTable extends TableData.References {\n fnOrTable: string;\n}\n\nconst mapMatchToDb: {\n [K in TableData.References.Match]: DbStructure.ForeignKeyMatch;\n} = {\n FULL: 'f',\n PARTIAL: 'p',\n SIMPLE: 's',\n};\n\nconst mapMatchToCode = {} as {\n [K in DbStructure.ForeignKeyMatch]: TableData.References.Match;\n};\nfor (const key in mapMatchToDb) {\n mapMatchToCode[\n mapMatchToDb[\n key as TableData.References.Match\n ] as DbStructure.ForeignKeyMatch\n ] = key as TableData.References.Match;\n}\n\nconst mapActionToDb: {\n [K in TableData.References.Action]: DbStructure.ForeignKeyAction;\n} = {\n 'NO ACTION': 'a',\n RESTRICT: 'r',\n CASCADE: 'c',\n 'SET NULL': 'n',\n 'SET DEFAULT': 'd',\n};\n\nconst mapActionToCode = {} as {\n [K in DbStructure.ForeignKeyAction]: TableData.References.Action;\n};\nfor (const key in mapActionToDb) {\n mapActionToCode[\n mapActionToDb[\n key as TableData.References.Action\n ] as DbStructure.ForeignKeyAction\n ] = key as TableData.References.Action;\n}\n\nexport const processForeignKeys = (\n config: AnyRakeDbConfig,\n ast: RakeDbAst[],\n changeTables: ChangeTableData[],\n currentSchema: string,\n tableShapes: TableShapes,\n): void => {\n for (const changeTableData of changeTables) {\n const codeForeignKeys = collectCodeFkeys(\n config,\n changeTableData,\n currentSchema,\n );\n\n const { codeTable, dbTableData, changeTableAst, schema, changingColumns } =\n changeTableData;\n const { shape, add, drop } = changeTableAst;\n let changed = false;\n\n for (const dbConstraint of dbTableData.constraints) {\n const { references: dbReferences } = dbConstraint;\n if (!dbReferences) continue;\n\n const hasChangedColumn = dbReferences.columns.some((column) =>\n checkForColumnAddOrDrop(shape, column),\n );\n if (hasChangedColumn) continue;\n\n const foreignShape =\n tableShapes[\n `${dbReferences.foreignSchema}.${dbReferences.foreignTable}`\n ];\n const hasForeignChangedColumn =\n foreignShape &&\n dbReferences.foreignColumns.some((column) => {\n const res = checkForColumnAddOrDrop(foreignShape, column);\n // console.log(res, column);\n return res;\n });\n if (hasForeignChangedColumn) continue;\n\n let found = false;\n let rename: string | undefined;\n for (let i = 0; i < codeForeignKeys.length; i++) {\n const codeForeignKey = codeForeignKeys[i];\n const codeReferences = codeForeignKey.references;\n if (deepCompare(dbReferences, codeReferences)) {\n found = true;\n codeForeignKeys.splice(i, 1);\n\n const codeName =\n codeForeignKey.codeConstraint.name ??\n getConstraintName(\n codeTable.table,\n codeForeignKey,\n config.snakeCase,\n );\n if (codeName !== dbConstraint.name) {\n rename = codeName;\n }\n }\n }\n\n if (!found) {\n const foreignKey = dbForeignKeyToCodeForeignKey(\n config,\n dbConstraint,\n dbReferences,\n );\n\n if (\n dbReferences.columns.length === 1 &&\n changingColumns[dbReferences.columns[0]]\n ) {\n const column = changingColumns[dbReferences.columns[0]];\n (column.from.data.foreignKeys ??= []).push({\n fnOrTable: foreignKey.references.fnOrTable,\n foreignColumns: foreignKey.references.foreignColumns,\n options: foreignKey.references.options,\n });\n } else {\n (drop.constraints ??= []).push(foreignKey);\n }\n\n changed = true;\n } else if (rename) {\n ast.push({\n type: 'renameTableItem',\n kind: 'CONSTRAINT',\n tableSchema: schema,\n tableName: codeTable.table,\n from: dbConstraint.name,\n to: rename,\n });\n }\n }\n\n if (codeForeignKeys.length) {\n const constraints = (add.constraints ??= []);\n for (const { codeConstraint, references } of codeForeignKeys) {\n if (\n references.columns.length === 1 &&\n changingColumns[references.columns[0]]\n ) {\n const column = changingColumns[references.columns[0]];\n (column.to.data.foreignKeys ??= []).push({\n fnOrTable: references.foreignTable,\n foreignColumns: codeConstraint.references.foreignColumns,\n options: codeConstraint.references.options,\n });\n } else {\n constraints.push(codeConstraint);\n }\n }\n\n changed = true;\n }\n\n if (changed && !changeTableData.pushedAst) {\n changeTableData.pushedAst = true;\n ast.push(changeTableData.changeTableAst);\n }\n }\n};\n\nconst collectCodeFkeys = (\n config: AnyRakeDbConfig,\n { codeTable, changeTableAst: { shape } }: ChangeTableData,\n currentSchema: string,\n): CodeForeignKey[] => {\n const codeForeignKeys: CodeForeignKey[] = [];\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as ColumnType;\n if (!column.data.foreignKeys) continue;\n\n const name = column.data.name ?? key;\n if (checkForColumnAddOrDrop(shape, name)) continue;\n\n codeForeignKeys.push(\n ...column.data.foreignKeys.map((x) => {\n const columns = [name];\n\n const fnOrTable = fnOrTableToString(x.fnOrTable);\n\n return parseForeignKey(\n config,\n {\n name: x.options?.name,\n references: {\n columns: [key],\n fnOrTable,\n foreignColumns: x.foreignColumns,\n options: x.options,\n },\n },\n {\n columns,\n fnOrTable,\n foreignColumns: x.foreignColumns,\n options: x.options,\n },\n currentSchema,\n );\n }),\n );\n }\n\n if (codeTable.internal.tableData.constraints) {\n for (const tableConstraint of codeTable.internal.tableData.constraints) {\n const { references: refs } = tableConstraint;\n if (!refs) continue;\n\n const fnOrTable = fnOrTableToString(refs.fnOrTable);\n\n codeForeignKeys.push(\n parseForeignKey(\n config,\n {\n ...tableConstraint,\n references: {\n ...refs,\n fnOrTable,\n },\n },\n {\n ...refs,\n fnOrTable,\n columns: config.snakeCase\n ? refs.columns.map(toSnakeCase)\n : refs.columns,\n foreignColumns: config.snakeCase\n ? refs.foreignColumns.map(toSnakeCase)\n : refs.foreignColumns,\n },\n currentSchema,\n ),\n );\n }\n }\n\n return codeForeignKeys;\n};\n\nexport const fnOrTableToString = (\n fnOrTable: TableData.References['fnOrTable'],\n) => {\n if (typeof fnOrTable !== 'string') {\n const { schema, table } = new (fnOrTable())();\n fnOrTable = concatSchemaAndName({ schema, name: table });\n }\n return fnOrTable;\n};\n\nconst parseForeignKey = (\n config: AnyRakeDbConfig,\n codeConstraint: Constraint,\n references: ReferencesWithStringTable,\n currentSchema: string,\n): CodeForeignKey => {\n const { fnOrTable, columns, foreignColumns, options } = references;\n const [schema, table] = getSchemaAndTableFromName(fnOrTable);\n\n return {\n references: {\n foreignSchema: schema ?? currentSchema,\n foreignTable: table,\n columns,\n foreignColumns: config.snakeCase\n ? foreignColumns.map(toSnakeCase)\n : foreignColumns,\n match: mapMatchToDb[options?.match || 'SIMPLE'],\n onUpdate: mapActionToDb[options?.onUpdate || 'NO ACTION'],\n onDelete: mapActionToDb[options?.onDelete || 'NO ACTION'],\n },\n codeConstraint,\n };\n};\n\nconst dbForeignKeyToCodeForeignKey = (\n config: AnyRakeDbConfig,\n dbConstraint: DbStructure.Constraint,\n dbReferences: DbStructure.References,\n): { name?: string; references: TableData.References } => ({\n name:\n dbConstraint.name ===\n getConstraintName(\n dbConstraint.tableName,\n { references: dbReferences },\n config.snakeCase,\n )\n ? undefined\n : dbConstraint.name,\n references: {\n columns: dbReferences.columns,\n fnOrTable: `${dbReferences.foreignSchema}.${dbReferences.foreignTable}`,\n foreignColumns: dbReferences.foreignColumns,\n options: {\n match:\n dbReferences.match === 's'\n ? undefined\n : mapMatchToCode[dbReferences.match],\n onUpdate:\n dbReferences.onUpdate === 'a'\n ? undefined\n : mapActionToCode[dbReferences.onUpdate],\n onDelete:\n dbReferences.onDelete === 'a'\n ? undefined\n : mapActionToCode[dbReferences.onDelete],\n },\n },\n});\n","import { ColumnDataCheckBase, TemplateLiteralArgs } from 'orchid-core';\nimport { ColumnType, RawSQL } from 'pqb';\nimport { DbStructure, RakeDbAst } from 'rake-db';\nimport { ChangeTableData } from './tables.generator';\nimport { checkForColumnAddOrDrop, CompareExpression } from './generators.utils';\n\ninterface CodeCheck extends ColumnDataCheckBase {\n column?: string;\n}\n\nexport const processChecks = (\n ast: RakeDbAst[],\n changeTableData: ChangeTableData,\n compareExpressions: CompareExpression[],\n): void => {\n const codeChecks = collectCodeChecks(changeTableData);\n const {\n dbTableData,\n changeTableAst: { add, shape },\n } = changeTableData;\n\n const hasDbChecks = dbTableData.constraints.some((c) => c.check);\n if (!hasDbChecks) {\n if (codeChecks.length) {\n const constraints = (add.constraints ??= []);\n for (const check of codeChecks) {\n if (check.column && changeTableData.changingColumns[check.column]) {\n const column = changeTableData.changingColumns[check.column];\n column.to.data.check = check;\n } else {\n constraints.push({ check: check.sql, name: check.name });\n }\n }\n }\n return;\n }\n\n let wait = 0;\n const foundCodeChecks = new Set<number>();\n for (const dbConstraint of dbTableData.constraints) {\n const { check: dbCheck, name } = dbConstraint;\n if (!dbCheck) continue;\n\n const hasChangedColumn = dbCheck.columns?.some((column) =>\n checkForColumnAddOrDrop(shape, column),\n );\n if (hasChangedColumn) continue;\n\n if (codeChecks.length) {\n wait++;\n compareExpressions.push({\n compare: [\n {\n inDb: dbCheck.expression,\n inCode: codeChecks.map((check) => check.sql),\n },\n ],\n handle(index) {\n if (index !== undefined) return;\n\n dropCheck(changeTableData, dbCheck, name);\n\n if (--wait === 0 && !changeTableData.pushedAst) {\n changeTableData.pushedAst = true;\n\n (add.constraints ??= []).push(\n ...codeChecks\n .filter((_, i) => !foundCodeChecks.has(i))\n .map((check) => ({\n name: check.name,\n check: check.sql,\n })),\n );\n\n ast.push(changeTableData.changeTableAst);\n }\n },\n });\n } else {\n dropCheck(changeTableData, dbCheck, name);\n }\n }\n};\n\nconst collectCodeChecks = ({\n codeTable,\n changeTableAst: { shape },\n}: ChangeTableData): CodeCheck[] => {\n const codeChecks: CodeCheck[] = [];\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as ColumnType;\n if (!column.data.check) continue;\n\n const name = column.data.name ?? key;\n if (checkForColumnAddOrDrop(shape, name)) continue;\n\n codeChecks.push({\n ...column.data.check,\n column: name,\n });\n }\n\n if (codeTable.internal.tableData.constraints) {\n for (const constraint of codeTable.internal.tableData.constraints) {\n const { check } = constraint;\n if (check) {\n codeChecks.push({ sql: check, name: constraint.name });\n }\n }\n }\n\n return codeChecks;\n};\n\nconst dropCheck = (\n { changeTableAst: { drop }, changingColumns }: ChangeTableData,\n dbCheck: DbStructure.Check,\n name: string,\n) => {\n const constraints = (drop.constraints ??= []);\n const sql = new RawSQL([\n [dbCheck.expression],\n ] as unknown as TemplateLiteralArgs);\n\n if (dbCheck.columns?.length === 1 && changingColumns[dbCheck.columns[0]]) {\n const column = changingColumns[dbCheck.columns[0]];\n column.from.data.name = 'i_d';\n column.from.data.check = {\n name,\n sql,\n };\n } else {\n constraints.push({\n name,\n check: sql,\n });\n }\n};\n","import {\n Adapter,\n ColumnsShape,\n ColumnType,\n GeneratorIgnore,\n VirtualColumn,\n} from 'pqb';\nimport {\n DbStructure,\n IntrospectedStructure,\n AnyRakeDbConfig,\n RakeDbAst,\n DbStructureDomainsMap,\n getDbStructureTableData,\n StructureToAstCtx,\n StructureToAstTableData,\n tableToAst,\n getSchemaAndTableFromName,\n} from 'rake-db';\nimport {\n CompareExpression,\n compareSqlExpressions,\n promptCreateOrRename,\n TableExpression,\n} from './generators.utils';\nimport { processPrimaryKey } from './primaryKey.generator';\nimport { processIndexes } from './indexes.generator';\nimport {\n getColumnDbType,\n processColumns,\n TypeCastsCache,\n} from './columns.generator';\nimport { processForeignKeys } from './foreignKeys.generator';\nimport { processChecks } from './checks.generator';\nimport { CodeTable } from '../generate';\n\nexport interface CompareSql {\n values: unknown[];\n expressions: {\n inDb: string;\n inCode: string;\n change(): void;\n }[];\n}\n\nexport interface ChangeTableSchemaData {\n codeTable: CodeTable;\n dbTable: DbStructure.Table;\n}\n\nexport interface ChangeTableData extends ChangeTableSchemaData {\n dbTableData: StructureToAstTableData;\n schema: string;\n changeTableAst: RakeDbAst.ChangeTable;\n pushedAst: boolean;\n changingColumns: ChangingColumns;\n delayedAst: RakeDbAst[];\n}\n\ninterface ChangingColumns {\n [dbName: string]: ChangingColumnsPair;\n}\n\nexport interface ChangingColumnsPair {\n from: ColumnType;\n to: ColumnType;\n}\n\nexport interface TableShapes {\n [K: string]: RakeDbAst.ChangeTableShape;\n}\n\nexport const processTables = async (\n ast: RakeDbAst[],\n structureToAstCtx: StructureToAstCtx,\n domainsMap: DbStructureDomainsMap,\n adapter: Adapter,\n tables: CodeTable[],\n dbStructure: IntrospectedStructure,\n currentSchema: string,\n config: AnyRakeDbConfig,\n generatorIgnore: GeneratorIgnore | undefined,\n verifying: boolean | undefined,\n): Promise<void> => {\n const createTables: CodeTable[] = collectCreateTables(\n tables,\n dbStructure,\n currentSchema,\n );\n const compareSql: CompareSql = { values: [], expressions: [] };\n const tableExpressions: TableExpression[] = [];\n const { changeTables, changeTableSchemas, dropTables, tableShapes } =\n collectChangeAndDropTables(\n config,\n tables,\n dbStructure,\n currentSchema,\n createTables,\n generatorIgnore,\n );\n\n applyChangeTableSchemas(changeTableSchemas, currentSchema, ast);\n\n await applyCreateOrRenameTables(\n dbStructure,\n createTables,\n dropTables,\n changeTables,\n tableShapes,\n currentSchema,\n ast,\n verifying,\n );\n\n await applyChangeTables(\n adapter,\n changeTables,\n structureToAstCtx,\n dbStructure,\n domainsMap,\n ast,\n currentSchema,\n config,\n compareSql,\n tableExpressions,\n verifying,\n );\n\n processForeignKeys(config, ast, changeTables, currentSchema, tableShapes);\n\n await Promise.all([\n applyCompareSql(compareSql, adapter),\n compareSqlExpressions(tableExpressions, adapter),\n ]);\n\n for (const dbTable of dropTables) {\n ast.push(\n tableToAst(structureToAstCtx, dbStructure, dbTable, 'drop', domainsMap),\n );\n }\n};\n\nconst collectCreateTables = (\n tables: CodeTable[],\n dbStructure: IntrospectedStructure,\n currentSchema: string,\n): CodeTable[] => {\n return tables.reduce<CodeTable[]>((acc, codeTable) => {\n const tableSchema = codeTable.q.schema ?? currentSchema;\n const hasDbTable = dbStructure.tables.some(\n (t) => t.name === codeTable.table && t.schemaName === tableSchema,\n );\n if (!hasDbTable) {\n acc.push(codeTable);\n }\n return acc;\n }, []);\n};\n\nconst collectChangeAndDropTables = (\n config: AnyRakeDbConfig,\n tables: CodeTable[],\n dbStructure: IntrospectedStructure,\n currentSchema: string,\n createTables: CodeTable[],\n generatorIgnore: GeneratorIgnore | undefined,\n): {\n changeTables: ChangeTableData[];\n changeTableSchemas: ChangeTableSchemaData[];\n dropTables: DbStructure.Table[];\n tableShapes: TableShapes;\n} => {\n const changeTables: ChangeTableData[] = [];\n const changeTableSchemas: ChangeTableSchemaData[] = [];\n const dropTables: DbStructure.Table[] = [];\n const tableShapes: TableShapes = {};\n const ignoreTables = generatorIgnore?.tables?.map((name) => {\n const [schema = currentSchema, table] = getSchemaAndTableFromName(name);\n return { schema, table };\n });\n\n for (const dbTable of dbStructure.tables) {\n if (\n dbTable.name === config.migrationsTable ||\n ignoreTables?.some(\n ({ schema, table }) =>\n table === dbTable.name && schema === dbTable.schemaName,\n )\n )\n continue;\n\n const codeTable = tables.find(\n (t) =>\n t.table === dbTable.name &&\n (t.q.schema ?? currentSchema) === dbTable.schemaName,\n );\n if (codeTable) {\n addChangeTable(\n dbStructure,\n changeTables,\n tableShapes,\n currentSchema,\n dbTable,\n codeTable,\n );\n continue;\n }\n\n const i = createTables.findIndex((t) => t.table === dbTable.name);\n if (i !== -1) {\n const codeTable = createTables[i];\n createTables.splice(i, 1);\n changeTableSchemas.push({ codeTable, dbTable });\n continue;\n }\n\n dropTables.push(dbTable);\n }\n\n return { changeTables, changeTableSchemas, dropTables, tableShapes };\n};\n\nconst applyChangeTableSchemas = (\n changeTableSchemas: ChangeTableSchemaData[],\n currentSchema: string,\n ast: RakeDbAst[],\n) => {\n for (const { codeTable, dbTable } of changeTableSchemas) {\n const fromSchema = dbTable.schemaName;\n const toSchema = codeTable.q.schema ?? currentSchema;\n\n ast.push({\n type: 'renameType',\n kind: 'TABLE',\n fromSchema,\n from: dbTable.name,\n toSchema,\n to: dbTable.name,\n });\n }\n};\n\nconst applyChangeTables = async (\n adapter: Adapter,\n changeTables: ChangeTableData[],\n structureToAstCtx: StructureToAstCtx,\n dbStructure: IntrospectedStructure,\n domainsMap: DbStructureDomainsMap,\n ast: RakeDbAst[],\n currentSchema: string,\n config: AnyRakeDbConfig,\n compareSql: CompareSql,\n tableExpressions: TableExpression[],\n verifying: boolean | undefined,\n): Promise<void> => {\n const compareExpressions: CompareExpression[] = [];\n const typeCastsCache: TypeCastsCache = {};\n\n for (const changeTableData of changeTables) {\n compareExpressions.length = 0;\n\n await processTableChange(\n adapter,\n structureToAstCtx,\n dbStructure,\n domainsMap,\n ast,\n currentSchema,\n config,\n changeTableData,\n compareSql,\n compareExpressions,\n typeCastsCache,\n verifying,\n );\n\n if (compareExpressions.length) {\n const { codeTable } = changeTableData;\n const names: string[] = [];\n const types: string[] = [];\n\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as ColumnType;\n // skip virtual columns\n if (!column.dataType) continue;\n\n const name = column.data.name ?? key;\n names.push(name);\n types.push(getColumnDbType(column, currentSchema));\n }\n\n const tableName = codeTable.table;\n const source = `(VALUES (${types\n .map((x) => `NULL::${x}`)\n .join(', ')})) \"${tableName}\"(${names\n .map((x) => `\"${x}\"`)\n .join(', ')})`;\n\n tableExpressions.push(\n ...compareExpressions.map((x) => ({ ...x, source })),\n );\n }\n }\n};\n\nconst applyCompareSql = async (compareSql: CompareSql, adapter: Adapter) => {\n if (compareSql.expressions.length) {\n const {\n rows: [results],\n } = await adapter.arrays({\n text:\n 'SELECT ' +\n compareSql.expressions\n .map((x) => `${x.inDb} = (${x.inCode})`)\n .join(', '),\n values: compareSql.values,\n });\n\n for (let i = 0; i < results.length; i++) {\n if (!results[i]) {\n compareSql.expressions[i].change();\n }\n }\n }\n};\n\nconst applyCreateOrRenameTables = async (\n dbStructure: IntrospectedStructure,\n createTables: CodeTable[],\n dropTables: DbStructure.Table[],\n changeTables: ChangeTableData[],\n tableShapes: TableShapes,\n currentSchema: string,\n ast: RakeDbAst[],\n verifying: boolean | undefined,\n) => {\n for (const codeTable of createTables) {\n if (dropTables.length) {\n const index = await promptCreateOrRename(\n 'table',\n codeTable.table,\n dropTables.map((x) => x.name),\n verifying,\n );\n if (index) {\n const dbTable = dropTables[index - 1];\n dropTables.splice(index - 1, 1);\n\n ast.push({\n type: 'renameType',\n kind: 'TABLE',\n fromSchema: dbTable.schemaName,\n from: dbTable.name,\n toSchema: codeTable.q.schema ?? currentSchema,\n to: codeTable.table,\n });\n\n addChangeTable(\n dbStructure,\n changeTables,\n tableShapes,\n currentSchema,\n dbTable,\n codeTable,\n );\n\n continue;\n }\n }\n\n ast.push(createTableAst(currentSchema, codeTable));\n }\n};\n\nconst addChangeTable = (\n dbStructure: IntrospectedStructure,\n changeTables: ChangeTableData[],\n tableShapes: TableShapes,\n currentSchema: string,\n dbTable: DbStructure.Table,\n codeTable: CodeTable,\n) => {\n const shape = {};\n const schema = codeTable.q.schema ?? currentSchema;\n\n changeTables.push({\n codeTable,\n dbTable,\n dbTableData: getDbStructureTableData(dbStructure, dbTable),\n schema,\n changeTableAst: {\n type: 'changeTable',\n schema,\n name: codeTable.table,\n shape: shape,\n add: {},\n drop: {},\n },\n pushedAst: false,\n changingColumns: {},\n delayedAst: [],\n });\n\n tableShapes[`${schema}.${codeTable.table}`] = shape;\n};\n\nconst createTableAst = (\n currentSchema: string,\n table: CodeTable,\n): RakeDbAst.Table => {\n return {\n type: 'table',\n action: 'create',\n schema: table.q.schema === currentSchema ? undefined : table.q.schema,\n comment: table.internal.comment,\n name: table.table,\n shape: makeTableShape(table),\n noPrimaryKey: table.internal.noPrimaryKey ? 'ignore' : 'error',\n ...table.internal.tableData,\n };\n};\n\nconst makeTableShape = (table: CodeTable): ColumnsShape => {\n const shape: ColumnsShape = {};\n for (const key in table.shape) {\n const column = table.shape[key];\n if (!(column instanceof VirtualColumn)) {\n shape[key] = column as ColumnType;\n }\n }\n return shape;\n};\n\nconst processTableChange = async (\n adapter: Adapter,\n structureToAstCtx: StructureToAstCtx,\n dbStructure: IntrospectedStructure,\n domainsMap: DbStructureDomainsMap,\n ast: RakeDbAst[],\n currentSchema: string,\n config: AnyRakeDbConfig,\n changeTableData: ChangeTableData,\n compareSql: CompareSql,\n compareExpressions: CompareExpression[],\n typeCastsCache: TypeCastsCache,\n verifying: boolean | undefined,\n) => {\n await processColumns(\n adapter,\n config,\n structureToAstCtx,\n dbStructure,\n domainsMap,\n changeTableData,\n ast,\n currentSchema,\n compareSql,\n typeCastsCache,\n verifying,\n );\n\n processPrimaryKey(config, changeTableData);\n\n processIndexes(config, changeTableData, ast, compareExpressions);\n\n processChecks(ast, changeTableData, compareExpressions);\n\n const { changeTableAst } = changeTableData;\n if (\n Object.keys(changeTableAst.shape).length ||\n Object.keys(changeTableAst.add).length ||\n Object.keys(changeTableAst.drop).length\n ) {\n changeTableData.pushedAst = true;\n ast.push(changeTableAst);\n }\n\n if (changeTableData.delayedAst.length) {\n ast.push(...changeTableData.delayedAst);\n }\n};\n","import { Adapter, QueryInternal } from 'pqb';\nimport {\n AnyRakeDbConfig,\n RakeDbAst,\n IntrospectedStructure,\n makeDomainsMap,\n StructureToAstCtx,\n astToMigration,\n} from 'rake-db';\nimport { processSchemas } from './generators/schemas.generator';\nimport { processExtensions } from './generators/extensions.generator';\nimport { processDomains } from './generators/domains.generator';\nimport { processEnums } from './generators/enums.generator';\nimport { processTables } from './generators/tables.generator';\nimport { CodeItems } from './generate';\n\nexport interface ComposeMigrationParams {\n structureToAstCtx: StructureToAstCtx;\n codeItems: CodeItems;\n currentSchema: string;\n internal: QueryInternal;\n verifying?: boolean;\n}\n\nexport const composeMigration = async (\n adapter: Adapter,\n config: AnyRakeDbConfig,\n ast: RakeDbAst[],\n dbStructure: IntrospectedStructure,\n {\n structureToAstCtx,\n codeItems: { schemas, enums, tables, domains },\n currentSchema,\n internal,\n verifying,\n }: ComposeMigrationParams,\n): Promise<string | undefined> => {\n const domainsMap = makeDomainsMap(structureToAstCtx, dbStructure);\n\n await processSchemas(ast, schemas, dbStructure, verifying);\n processExtensions(ast, dbStructure, currentSchema, internal.extensions);\n await processDomains(\n ast,\n adapter,\n structureToAstCtx,\n domainsMap,\n dbStructure,\n currentSchema,\n domains,\n );\n await processEnums(ast, enums, dbStructure, currentSchema, verifying);\n await processTables(\n ast,\n structureToAstCtx,\n domainsMap,\n adapter,\n tables,\n dbStructure,\n currentSchema,\n config,\n internal.generatorIgnore,\n verifying,\n );\n\n return astToMigration(currentSchema, config, ast);\n};\n","import { ColumnSchemaConfig } from 'orchid-core';\nimport { Adapter } from 'pqb';\nimport {\n AnyRakeDbConfig,\n createMigrationInterface,\n ChangeCallback,\n introspectDbSchema,\n} from 'rake-db';\nimport { composeMigration, ComposeMigrationParams } from './composeMigration';\nimport { AbortSignal } from './generate';\n\nexport const verifyMigration = async (\n adapter: Adapter,\n config: AnyRakeDbConfig,\n migrationCode: string,\n generateMigrationParams: ComposeMigrationParams,\n): Promise<string | false | undefined> => {\n const migrationFn = new Function('change', migrationCode);\n\n return adapter.transaction(\n { text: 'BEGIN' },\n async (trx) => {\n const changeFns: ChangeCallback<unknown>[] = [];\n migrationFn((changeCb: ChangeCallback<unknown>) => {\n changeFns.push(changeCb);\n });\n\n const { log } = config;\n config.log = false;\n\n const db = createMigrationInterface<ColumnSchemaConfig, unknown>(\n trx,\n true,\n config,\n );\n\n config.log = log;\n\n for (const changeFn of changeFns) {\n await changeFn(db, true);\n }\n\n const dbStructure = await introspectDbSchema(trx);\n generateMigrationParams.verifying = true;\n let code: string | undefined;\n try {\n code = await composeMigration(\n adapter,\n config,\n [],\n dbStructure,\n generateMigrationParams,\n );\n } catch (err) {\n if (err instanceof AbortSignal) {\n return false;\n }\n throw err;\n }\n\n return code;\n },\n { text: 'ROLLBACK' },\n );\n};\n","import {\n AnyRakeDbConfig,\n RakeDbAst,\n colors,\n exhaustive,\n getSchemaAndTableFromName,\n pluralize,\n} from 'rake-db';\nimport {\n addCode,\n Code,\n codeToString,\n ColumnToCodeCtx,\n toArray,\n} from 'orchid-core';\nimport { getColumnDbType } from './generators/columns.generator';\nimport { fnOrTableToString } from './generators/foreignKeys.generator';\n\nexport const report = (\n ast: RakeDbAst[],\n config: AnyRakeDbConfig,\n currentSchema: string,\n) => {\n if (!config.logger) return;\n\n const code: Code[] = [];\n\n let green, red, yellow, pale;\n if (typeof config.log === 'object' && config.log.colors === false) {\n green = red = yellow = pale = (s: string) => s;\n } else {\n ({ green, red, yellow, pale } = colors);\n }\n\n for (const a of ast) {\n switch (a.type) {\n case 'table': {\n let hasPrimaryKey = !!a.primaryKey;\n const counters = {\n column: 0,\n index: a.indexes?.length ?? 0,\n 'foreign key':\n a.constraints?.reduce<number>(\n (sum, c) => (c.references ? sum + 1 : sum),\n 0,\n ) ?? 0,\n check:\n a.constraints?.reduce<number>(\n (sum, c) => (c.check ? sum + 1 : sum),\n 0,\n ) ?? 0,\n };\n for (const key in a.shape) {\n counters.column++;\n\n const column = a.shape[key];\n if (column.data.primaryKey) {\n hasPrimaryKey = true;\n }\n\n if (column.data.indexes) {\n counters.index += column.data.indexes.length;\n }\n\n if (column.data.foreignKeys) {\n counters['foreign key'] += column.data.foreignKeys.length;\n }\n\n if (column.data.check) {\n counters.check++;\n }\n }\n\n const summary: string[] = [];\n\n for (const key in counters) {\n const value = counters[key as keyof typeof counters];\n if (value || key === 'column') {\n summary.push(\n `${value} ${pluralize(key, value, key === 'index' ? 'es' : 's')}`,\n );\n }\n }\n\n if (!hasPrimaryKey) {\n summary.push('no primary key');\n }\n\n code.push(\n `${\n a.action === 'create'\n ? green('+ create table')\n : red('- drop table')\n } ${dbItemName(a, currentSchema)} (${summary.join(', ')})`,\n );\n break;\n }\n case 'changeTable': {\n const inner: Code[] = [];\n\n const toCodeCtx: ColumnToCodeCtx = {\n t: 't',\n table: a.name,\n migration: true,\n snakeCase: config.snakeCase,\n };\n\n for (const key in a.shape) {\n const changes = toArray(a.shape[key]);\n for (const change of changes) {\n if (change.type === 'add' || change.type === 'drop') {\n const column = change.item;\n const { primaryKey, indexes, foreignKeys, check } = column.data;\n\n inner.push(\n `${\n change.type === 'add'\n ? green('+ add column')\n : red('- drop column')\n } ${key} ${\n column.data.alias ?? getColumnDbType(column, currentSchema)\n }${column.data.isNullable ? ' nullable' : ''}${\n primaryKey ? ' primary key' : ''\n }${\n foreignKeys\n ? ` references ${foreignKeys\n .map((fk) => {\n return `${fnOrTableToString(\n fk.fnOrTable,\n )}(${fk.foreignColumns.join(', ')})`;\n })\n .join(', ')}`\n : ''\n }${\n indexes?.length\n ? indexes.length === 1\n ? ', has index'\n : `, has ${indexes.length} indexes`\n : ''\n }${check ? `, checks ${check.sql.toSQL({ values: [] })}` : ''}`,\n );\n } else if (change.type === 'change') {\n const name = change.from.column?.data.name ?? key;\n const changes: Code[] = [];\n inner.push(`${yellow('~ change column')} ${name}:`, changes);\n changes.push(`${yellow('from')}: `);\n\n const fromCode = change.from.column!.toCode(toCodeCtx, key);\n for (const code of fromCode) {\n addCode(changes, code);\n }\n\n changes.push(` ${yellow('to')}: `);\n\n const toCode = change.to.column!.toCode(toCodeCtx, key);\n for (const code of toCode) {\n addCode(changes, code);\n }\n } else if (change.type === 'rename') {\n inner.push(\n `${yellow('~ rename column')} ${key} ${yellow('=>')} ${\n change.name\n }`,\n );\n } else {\n exhaustive(change.type);\n }\n }\n }\n\n if (a.drop.primaryKey) {\n inner.push(\n `${red(`- drop primary key`)} on (${a.drop.primaryKey.columns.join(\n ', ',\n )})`,\n );\n }\n\n if (a.drop.indexes) {\n for (const index of a.drop.indexes) {\n inner.push(\n `${red(\n `- drop${index.options.unique ? ' unique' : ''} index`,\n )} on (${index.columns\n .map((c) => ('column' in c ? c.column : c.expression))\n .join(', ')})`,\n );\n }\n }\n\n if (a.drop.constraints) {\n for (const { references } of a.drop.constraints) {\n if (!references) continue;\n\n const [schema, name] = getSchemaAndTableFromName(\n references.fnOrTable as string,\n );\n\n inner.push(\n `${red(`- drop foreign key`)} on (${references.columns.join(\n ', ',\n )}) to ${dbItemName(\n {\n schema,\n name,\n },\n currentSchema,\n )}(${references.foreignColumns.join(', ')})`,\n );\n }\n\n for (const { check } of a.drop.constraints) {\n if (!check) continue;\n\n inner.push(`${red(`- drop check`)} ${check.toSQL({ values: [] })}`);\n }\n }\n\n if (a.add.primaryKey) {\n inner.push(\n `${green(`+ add primary key`)} on (${a.add.primaryKey.columns.join(\n ', ',\n )})`,\n );\n }\n\n if (a.add.indexes) {\n for (const index of a.add.indexes) {\n inner.push(\n `${green(\n `+ add${index.options.unique ? ' unique' : ''} index`,\n )} on (${index.columns\n .map((c) => ('column' in c ? c.column : c.expression))\n .join(', ')})`,\n );\n }\n }\n\n if (a.add.constraints) {\n for (const { references } of a.add.constraints) {\n if (!references) continue;\n\n inner.push(\n `${green(`+ add foreign key`)} on (${references.columns.join(\n ', ',\n )}) to ${\n references.fnOrTable as string\n }(${references.foreignColumns.join(', ')})`,\n );\n }\n\n for (const { check } of a.add.constraints) {\n if (!check) continue;\n\n inner.push(\n `${green(`+ add check`)} ${check.toSQL({ values: [] })}`,\n );\n }\n }\n\n code.push(\n `${yellow('~ change table')} ${dbItemName(a, currentSchema)}${\n inner.length ? ':' : ''\n }`,\n );\n\n if (inner.length) {\n code.push(inner);\n }\n\n break;\n }\n case 'schema': {\n code.push(\n `${\n a.action === 'create'\n ? green('+ create schema')\n : red('- drop schema')\n } ${a.name}`,\n );\n break;\n }\n case 'renameSchema': {\n code.push(\n `${yellow('~ rename schema')} ${a.from} ${yellow('=>')} ${a.to}`,\n );\n break;\n }\n case 'renameType': {\n code.push(\n `${yellow(\n `~ ${\n a.fromSchema !== a.toSchema\n ? a.from !== a.to\n ? 'change schema and rename'\n : 'change schema of'\n : 'rename'\n } ${a.kind.toLowerCase()}`,\n )} ${dbItemName(\n {\n schema: a.fromSchema,\n name: a.from,\n },\n currentSchema,\n )} ${yellow('=>')} ${dbItemName(\n {\n schema: a.toSchema,\n name: a.to,\n },\n currentSchema,\n )}`,\n );\n break;\n }\n case 'extension': {\n code.push(\n `${\n a.action === 'create'\n ? green('+ create extension')\n : red('- drop extension')\n } ${dbItemName(a, currentSchema)}${\n a.version ? ` ${pale(a.version)}` : ''\n }`,\n );\n break;\n }\n case 'enum': {\n code.push(\n `${\n a.action === 'create' ? green('+ create enum') : red('- drop enum')\n } ${dbItemName(a, currentSchema)}: (${a.values.join(', ')})`,\n );\n break;\n }\n case 'enumValues': {\n code.push(\n `${\n a.action === 'add'\n ? green('+ add values to enum')\n : red('- remove values from enum')\n } ${dbItemName(a, currentSchema)}: ${a.values.join(', ')}`,\n );\n break;\n }\n case 'changeEnumValues': {\n if (a.fromValues) {\n code.push(\n `${red('- remove values from enum')} ${dbItemName(\n a,\n currentSchema,\n )}: ${a.fromValues.join(', ')}`,\n );\n }\n if (a.toValues) {\n code.push(\n `${green('+ add values to enum')} ${dbItemName(\n a,\n currentSchema,\n )}: ${a.toValues.join(', ')}`,\n );\n }\n break;\n }\n case 'domain': {\n code.push(\n `${\n a.action === 'create'\n ? green('+ create domain')\n : red('- drop domain')\n } ${dbItemName(a, currentSchema)}`,\n );\n break;\n }\n case 'view':\n case 'collation':\n case 'renameEnumValues':\n case 'constraint':\n break;\n case 'renameTableItem': {\n code.push(\n `${yellow(`~ rename ${a.kind.toLowerCase()}`)} on table ${dbItemName(\n { schema: a.tableSchema, name: a.tableName },\n currentSchema,\n )}: ${a.from} ${yellow('=>')} ${a.to}`,\n );\n break;\n }\n default:\n exhaustive(a);\n }\n }\n\n const result = codeToString(code, '', ' ');\n config.logger.log(result);\n};\n\nconst dbItemName = (\n { schema, name }: { schema?: string; name: string },\n currentSchema: string,\n) => {\n return schema && schema !== currentSchema ? `${schema}.${name}` : name;\n};\n","import { PickQueryShape, QueryColumn, toCamelCase } from 'orchid-core';\nimport {\n Adapter,\n AdapterOptions,\n ColumnsShape,\n ColumnType,\n defaultSchemaConfig,\n DomainColumn,\n PickQueryInternal,\n PickQueryQ,\n Query,\n QueryInternal,\n UnknownColumn,\n} from 'pqb';\nimport {\n AnyRakeDbConfig,\n concatSchemaAndName,\n getSchemaAndTableFromName,\n introspectDbSchema,\n IntrospectedStructure,\n makeFileVersion,\n makeStructureToAstCtx,\n migrate,\n RakeDbAst,\n writeMigrationFile,\n} from 'rake-db';\nimport { EnumItem } from './generators/enums.generator';\nimport { CodeDomain } from './generators/domains.generator';\nimport { composeMigration, ComposeMigrationParams } from './composeMigration';\nimport { verifyMigration } from './verifyMigration';\nimport { report } from './reportGeneratedMigration';\nimport path from 'node:path';\nimport { pathToFileURL } from 'url';\n\nexport interface CodeTable\n extends PickQueryQ,\n PickQueryShape,\n PickQueryInternal {\n table: string;\n}\n\nexport interface CodeItems {\n schemas: Set<string>;\n enums: Map<string, EnumItem>;\n tables: CodeTable[];\n domains: CodeDomain[];\n}\n\ninterface AfterPull {\n adapter: Adapter;\n version: string;\n}\n\nexport interface DbInstance {\n $queryBuilder: Query;\n}\n\nexport class AbortSignal extends Error {}\n\nexport const generate = async (\n options: AdapterOptions[],\n config: AnyRakeDbConfig,\n args: string[],\n afterPull?: AfterPull,\n): Promise<void> => {\n let { dbPath } = config;\n if (!dbPath || !config.baseTable) throw invalidConfig(config);\n if (!options.length) throw new Error(`Database options must not be empty`);\n\n if (!dbPath.endsWith('.ts')) dbPath += '.ts';\n\n let migrationName = args[0] ?? 'generated';\n let up: boolean;\n if (migrationName === 'up') {\n up = true;\n migrationName = 'generated';\n } else {\n up = args[1] === 'up';\n }\n\n const { dbStructure, adapters } = await migrateAndPullStructures(\n options,\n config,\n afterPull,\n );\n\n const [adapter] = adapters;\n const currentSchema = adapter.schema ?? 'public';\n\n const db = await getDbFromConfig(config, dbPath);\n const { columnTypes, internal } = db.$queryBuilder;\n\n const codeItems = await getActualItems(\n db,\n currentSchema,\n internal,\n columnTypes,\n );\n\n const structureToAstCtx = makeStructureToAstCtx(config, currentSchema);\n\n const generateMigrationParams: ComposeMigrationParams = {\n structureToAstCtx,\n codeItems,\n currentSchema,\n internal,\n };\n\n const ast: RakeDbAst[] = [];\n\n let migrationCode;\n try {\n migrationCode = await composeMigration(\n adapter,\n config,\n ast,\n dbStructure,\n generateMigrationParams,\n );\n // console.log(migrationCode);\n } catch (err) {\n if (err instanceof AbortSignal) {\n await closeAdapters(adapters);\n return;\n }\n throw err;\n }\n\n if (migrationCode && !afterPull) {\n const result = await verifyMigration(\n adapter,\n config,\n migrationCode,\n generateMigrationParams,\n );\n\n if (result !== undefined) {\n throw new Error(\n `Failed to verify generated migration: some of database changes were not applied properly. This is a bug, please open an issue, attach the following migration code:\\n${migrationCode}${\n result === false ? '' : `\\nAfter applying:\\n${result}`\n }`,\n );\n }\n }\n\n const { logger } = config;\n\n if ((!up || !migrationCode) && !afterPull) await closeAdapters(adapters);\n\n if (!migrationCode) {\n logger?.log('No changes were detected');\n return;\n }\n\n const version = afterPull?.version ?? (await makeFileVersion({}, config));\n\n const delayLog: string[] = [];\n await writeMigrationFile(\n {\n ...config,\n logger: logger ? { ...logger, log: (msg) => delayLog.push(msg) } : logger,\n },\n version,\n migrationName,\n migrationCode,\n );\n\n report(ast, config, currentSchema);\n\n if (logger) {\n for (const msg of delayLog) {\n logger.log(`\\n${msg}`);\n }\n }\n\n if (up) {\n await migrate({}, options, config, undefined, adapters);\n } else if (!afterPull) {\n await closeAdapters(adapters);\n }\n};\n\nconst invalidConfig = (config: AnyRakeDbConfig) =>\n new Error(\n `\\`${\n config.dbPath ? 'baseTable' : 'dbPath'\n }\\` setting must be set in the migrations config for the generator to work`,\n );\n\nconst getDbFromConfig = async (\n config: AnyRakeDbConfig,\n dbPath: string,\n): Promise<DbInstance> => {\n const module = await config.import(\n pathToFileURL(path.resolve(config.basePath, dbPath)).toString(),\n );\n const db = (module as { [K: string]: DbInstance })[\n config.dbExportedAs ?? 'db'\n ];\n if (!db?.$queryBuilder) {\n throw new Error(\n `Unable to import OrchidORM instance as ${\n config.dbExportedAs ?? 'db'\n } from ${config.dbPath}`,\n );\n }\n return db;\n};\n\nconst migrateAndPullStructures = async (\n options: AdapterOptions[],\n config: AnyRakeDbConfig,\n afterPull?: AfterPull,\n): Promise<{ dbStructure: IntrospectedStructure; adapters: Adapter[] }> => {\n if (afterPull) {\n return {\n dbStructure: {\n schemas: [],\n tables: [],\n views: [],\n indexes: [],\n constraints: [],\n triggers: [],\n extensions: [],\n enums: [],\n domains: [],\n collations: [],\n },\n adapters: [afterPull.adapter],\n };\n }\n\n const adapters = await migrate(\n {},\n options,\n config,\n undefined,\n undefined,\n true,\n );\n\n const dbStructures = await Promise.all(\n adapters.map((adapter) => introspectDbSchema(adapter)),\n );\n\n const dbStructure = dbStructures[0];\n for (let i = 1; i < dbStructures.length; i++) {\n compareDbStructures(dbStructure, dbStructures[i], i);\n }\n\n return { dbStructure, adapters };\n};\n\nconst compareDbStructures = (\n a: unknown,\n b: unknown,\n i: number,\n path?: string,\n) => {\n let err: true | undefined;\n if (typeof a !== typeof b) {\n err = true;\n }\n\n if (!a || typeof a !== 'object') {\n if (a !== b) {\n err = true;\n }\n } else {\n if (Array.isArray(a)) {\n for (let n = 0, len = a.length; n < len; n++) {\n compareDbStructures(\n a[n],\n (b as unknown[])[n],\n i,\n path ? `${path}[${n}]` : String(n),\n );\n }\n } else {\n for (const key in a) {\n compareDbStructures(\n a[key as keyof typeof a],\n (b as Record<string, unknown>)[key],\n i,\n path ? `${path}.${key}` : key,\n );\n }\n }\n }\n\n if (err) {\n throw new Error(`${path} in the db 0 does not match db ${i}`);\n }\n};\n\nconst getActualItems = async (\n db: DbInstance,\n currentSchema: string,\n internal: QueryInternal,\n columnTypes: unknown,\n): Promise<CodeItems> => {\n const tableNames = new Set<string>();\n const habtmTables = new Map<string, CodeTable>();\n\n const codeItems: CodeItems = {\n schemas: new Set(undefined),\n enums: new Map(),\n tables: [],\n domains: [],\n };\n\n const domains = new Map<string, CodeDomain>();\n\n for (const key in db) {\n if (key[0] === '$') continue;\n\n const table = db[key as keyof typeof db] as Query;\n\n if (!table.table) {\n throw new Error(`Table ${key} is missing table property`);\n }\n\n const { schema } = table.q;\n const name = concatSchemaAndName({ schema, name: table.table });\n if (tableNames.has(name)) {\n throw new Error(`Table ${name} is defined more than once`);\n }\n\n tableNames.add(name);\n\n if (schema) codeItems.schemas.add(schema);\n\n codeItems.tables.push(table as never);\n\n for (const key in table.relations) {\n const column = table.shape[key];\n // column won't be set for has and belongs to many\n if (column && 'joinTable' in column) {\n processHasAndBelongsToManyColumn(column, habtmTables, codeItems);\n }\n }\n\n for (const key in table.shape) {\n const column = table.shape[key] as ColumnType;\n // remove computed columns from the shape\n if (column.data.computed) {\n delete table.shape[key];\n } else if (column instanceof DomainColumn) {\n const [schemaName = currentSchema, name] = getSchemaAndTableFromName(\n column.dataType,\n );\n domains.set(column.dataType, {\n schemaName,\n name,\n column: (column.data.as ??\n new UnknownColumn(defaultSchemaConfig)) as ColumnType,\n });\n } else if (column.dataType === 'enum') {\n processEnumColumn(column, currentSchema, codeItems);\n }\n }\n }\n\n if (internal.extensions) {\n for (const extension of internal.extensions) {\n const [schema] = getSchemaAndTableFromName(extension.name);\n if (schema) codeItems.schemas.add(schema);\n }\n }\n\n if (internal.domains) {\n for (const key in internal.domains) {\n const [schemaName = currentSchema, name] = getSchemaAndTableFromName(key);\n const column = internal.domains[key](columnTypes);\n\n domains.set(key, {\n schemaName,\n name,\n column,\n });\n }\n }\n\n for (const domain of domains.values()) {\n codeItems.schemas.add(domain.schemaName);\n codeItems.domains.push(domain);\n }\n\n return codeItems;\n};\n\nconst processEnumColumn = (\n column: QueryColumn,\n currentSchema: string,\n codeItems: CodeItems,\n) => {\n const { enumName, options } = column as unknown as {\n enumName: string;\n options: [string, ...string[]];\n };\n\n const [schema, name] = getSchemaAndTableFromName(enumName);\n const enumSchema = schema ?? currentSchema;\n\n codeItems.enums.set(`${enumSchema}.${name}`, {\n schema: enumSchema,\n name,\n values: options,\n });\n if (schema) codeItems.schemas.add(schema);\n};\n\nconst processHasAndBelongsToManyColumn = (\n column: QueryColumn & { joinTable: unknown },\n habtmTables: Map<string, CodeTable>,\n codeItems: CodeItems,\n) => {\n const q = (column as { joinTable: CodeTable }).joinTable;\n const prev = habtmTables.get(q.table);\n if (prev) {\n for (const key in q.shape) {\n if (q.shape[key].dataType !== prev.shape[key]?.dataType) {\n throw new Error(\n `Column ${key} in ${q.table} in hasAndBelongsToMany relation does not match with the relation on the other side`,\n );\n }\n }\n return;\n }\n habtmTables.set(q.table, q);\n\n const joinTable = Object.create(q);\n\n const shape: ColumnsShape = {};\n for (const key in joinTable.shape) {\n const column = Object.create(joinTable.shape[key]);\n column.data = {\n ...column.data,\n name: column.data.name ?? key,\n identity: undefined,\n primaryKey: undefined,\n default: undefined,\n };\n shape[toCamelCase(key)] = column;\n }\n joinTable.shape = shape;\n joinTable.internal = {\n ...joinTable.internal,\n tableData: {\n primaryKey: {\n columns: Object.keys(shape),\n },\n },\n noPrimaryKey: false,\n };\n\n codeItems.tables.push(joinTable);\n\n return;\n};\n\nconst closeAdapters = (adapters: Adapter[]) => {\n return Promise.all(adapters.map((x) => x.close()));\n};\n","import { columnsShapeToCode, pushTableDataCode, TableData } from 'pqb';\nimport { AnyRakeDbConfig, RakeDbAst } from 'rake-db';\nimport {\n Code,\n codeToString,\n getImportPath,\n RecordString,\n singleQuote,\n toCamelCase,\n toPascalCase,\n} from 'orchid-core';\nimport path from 'node:path';\n\ninterface TableInfo {\n key: string;\n dbTableName: string;\n name: string;\n className: string;\n path: string;\n}\n\ninterface TableInfos {\n [dbTableName: string]: TableInfo;\n}\n\nexport interface AppCodeGenTable extends TableInfo {\n content: string;\n}\n\nexport interface AppCodeGenTables {\n [K: string]: AppCodeGenTable;\n}\n\ninterface FKeys {\n [K: string]: { table: TableInfo; references: TableData.References }[];\n}\n\nexport const getTableInfosAndFKeys = (\n asts: RakeDbAst[],\n config: AnyRakeDbConfig,\n): { tableInfos: TableInfos; fkeys: FKeys } => {\n const generateTableTo =\n config.generateTableTo ?? ((name: string) => `./tables/${name}.table.ts`);\n\n const tableInfos: TableInfos = {};\n const fkeys: FKeys = {};\n for (const ast of asts) {\n if (ast.type === 'table') {\n const tableKey = toCamelCase(ast.name);\n const dbTableName = ast.schema ? `${ast.schema}.${ast.name}` : ast.name;\n let tablePath = path.resolve(config.basePath, generateTableTo(tableKey));\n if (!tablePath.endsWith('.ts')) tablePath += '.ts';\n\n const name = toPascalCase(ast.name);\n\n const info: TableInfo = {\n dbTableName,\n key: tableKey,\n path: tablePath,\n name,\n className: `${name}Table`,\n };\n\n tableInfos[dbTableName] = info;\n\n if (ast.constraints) {\n for (const { references } of ast.constraints) {\n if (!references) continue;\n\n (fkeys[references.fnOrTable as string] ??= []).push({\n table: info,\n references,\n });\n }\n }\n }\n }\n\n return { tableInfos, fkeys };\n};\n\nexport const appCodeGenTable = (\n tableInfos: TableInfos,\n fkeys: FKeys,\n ast: RakeDbAst.Table,\n baseTablePath: string,\n baseTableExportedAs: string,\n): AppCodeGenTable => {\n const tableInfo =\n tableInfos[ast.schema ? `${ast.schema}.${ast.name}` : ast.name];\n\n const imports: RecordString = {\n 'orchid-orm': 'Selectable, Insertable, Updatable',\n [getImportPath(tableInfo.path, baseTablePath)]: baseTableExportedAs,\n };\n\n const props: Code[] = [];\n\n if (ast.schema) {\n props.push(`schema = ${singleQuote(ast.schema)};`);\n }\n\n props.push(`readonly table = ${singleQuote(ast.name)};`);\n\n if (ast.comment) {\n props.push(`comment = ${singleQuote(ast.comment)};`);\n }\n\n if (ast.noPrimaryKey === 'ignore') {\n props.push('noPrimaryKey = true;');\n }\n\n const hasTableData = Boolean(\n ast.primaryKey || ast.indexes?.length || ast.constraints?.length,\n );\n\n const shapeCode = columnsShapeToCode({ t: 't', table: ast.name }, ast.shape);\n\n props.push(\n `columns = this.setColumns(${hasTableData ? '\\n ' : ''}(t) => ({`,\n hasTableData ? [shapeCode] : shapeCode,\n hasTableData ? ' }),' : '}));',\n );\n\n if (hasTableData) {\n props.push(pushTableDataCode([], ast), ');');\n }\n\n const relations: Code[] = [];\n\n const fullTableName = ast.schema ? `${ast.schema}.${ast.name}` : ast.name;\n const belongsTo = fkeys[fullTableName];\n if (belongsTo) {\n for (const { table, references } of belongsTo) {\n imports[getImportPath(tableInfo.path, table.path)] = table.className;\n\n relations.push(\n `${table.key}: this.belongsTo(() => ${table.className}, {`,\n [\n `columns: [${references.foreignColumns\n .map(singleQuote)\n .join(', ')}],`,\n `references: [${references.columns.map(singleQuote).join(', ')}],`,\n ],\n '}),',\n );\n }\n }\n\n if (ast.constraints) {\n for (const { references } of ast.constraints) {\n if (!references) continue;\n\n const table = tableInfos[references.fnOrTable as string];\n imports[getImportPath(tableInfo.path, table.path)] = table.className;\n\n relations.push(\n `${table.key}: this.hasMany(() => ${table.className}, {`,\n [\n `columns: [${references.columns.map(singleQuote).join(', ')}],`,\n `references: [${references.foreignColumns\n .map(singleQuote)\n .join(', ')}],`,\n ],\n '}),',\n );\n }\n }\n\n if (relations.length) {\n props.push('', 'relations = {', relations, '};');\n }\n\n const importsCode = importsToCode(imports);\n\n const { name, className } = tableInfo;\n const code: Code[] = [\n `export type ${name} = Selectable<${className}>;\nexport type ${name}New = Insertable<${className}>;\nexport type ${name}Update = Updatable<${className}>;\n\nexport class ${className} extends ${baseTableExportedAs} {`,\n props,\n '}\\n',\n ];\n\n return {\n ...tableInfo,\n content: importsCode + '\\n\\n' + codeToString(code, '', ' '),\n };\n};\n\nfunction importsToCode(imports: Record<string, string>): string {\n return Object.entries(imports)\n .map(([from, name]) => `import { ${name} } from '${from}';`)\n .join('\\n');\n}\n","import fs from 'fs/promises';\nimport {\n CallExpression,\n Expression,\n ImportDeclaration,\n NamedImports,\n NodeArray,\n ObjectLiteralExpression,\n Statement,\n VariableStatement,\n} from 'typescript';\nimport { getImportPath, quoteObjectKey } from 'orchid-core';\nimport { AppCodeGenTables } from './tables.appCodeGenerator';\nimport { DbExtension } from 'pqb';\nimport { RakeDbAst } from 'rake-db';\n\n// importing directly won't work after compiling\nimport typescript from 'typescript';\nconst { createSourceFile, ScriptTarget, SyntaxKind } = typescript;\n\ntype Change = [from: number, to: number] | string;\n\nexport const appCodeGenUpdateDbFile = async (\n dbPath: string,\n tables: AppCodeGenTables,\n extensions: DbExtension[],\n domains: RakeDbAst.Domain[],\n): Promise<string | undefined> => {\n const content = await fs.readFile(dbPath, 'utf-8');\n const statements = getTsStatements(content);\n const importName = getOrchidOrmImportName(statements);\n if (!importName) {\n throw new Error(`Main file does not contain import of orchid-orm`);\n }\n const { config, tablesList } = getOrchidOrmArgs(importName, statements);\n\n const changes: Change[] = [];\n\n let replacedConfig: string | undefined;\n if (extensions.length || domains.length) {\n let code = content.slice(config.pos, config.end).trim();\n\n if (code[0] !== '{') code = `{...${code}}`;\n\n code = '{\\n ' + code.slice(1, -1).trim();\n\n if (!code.endsWith(',')) code += ',';\n\n if (extensions.length) {\n code += `\\n extensions: [${extensions\n .map((ext) =>\n ext.version ? `{ ${ext.name}: '${ext.version}' }` : `'${ext.name}'`,\n )\n .join(', ')}],`;\n }\n\n if (domains.length) {\n code += `\\n domains: {\\n ${domains\n .sort((a, b) => (a.name > b.name ? 1 : -1))\n .map(\n (ast) =>\n `${quoteObjectKey(\n ast.schema ? `${ast.schema}.${ast.name}` : ast.name,\n )}: (t) => ${ast.baseType.toCode(\n { t: 't', table: ast.name },\n ast.baseType.data.name ?? '',\n )},`,\n )\n .join('\\n ')}\\n },`;\n }\n\n replacedConfig = code + '\\n}';\n }\n\n const tablesChanges = makeTablesListChanges(\n content,\n statements,\n tablesList,\n tables,\n dbPath,\n );\n\n if (tablesChanges) {\n addChange(\n content,\n changes,\n tablesChanges.imports.pos,\n tablesChanges.imports.text,\n );\n }\n\n if (replacedConfig) {\n replaceContent(content, changes, config.pos, config.end, replacedConfig);\n }\n\n if (tablesChanges) {\n addChange(\n content,\n changes,\n tablesChanges.tablesList.pos,\n tablesChanges.tablesList.text,\n );\n }\n\n return applyChanges(content, changes);\n};\n\nconst getTsStatements = (content: string): NodeArray<Statement> => {\n return createSourceFile('file.ts', content, ScriptTarget.Latest, true)\n .statements;\n};\n\nconst getOrchidOrmImportName = (\n statements: NodeArray<Statement>,\n): string | undefined => {\n for (const node of statements) {\n if (node.kind !== SyntaxKind.ImportDeclaration) continue;\n\n const imp = node as ImportDeclaration;\n const source = imp.moduleSpecifier.getText().slice(1, -1);\n if (source !== 'orchid-orm') continue;\n\n if (!imp.importClause) continue;\n\n const elements = (imp.importClause.namedBindings as NamedImports)?.elements;\n\n if (!elements) imp;\n\n for (const element of elements) {\n if (\n element.propertyName?.escapedText === 'orchidORM' ||\n element.name.escapedText === 'orchidORM'\n ) {\n return element.name.escapedText.toString();\n }\n }\n }\n\n return;\n};\n\nconst makeTablesListChanges = (\n content: string,\n statements: NodeArray<Statement>,\n object: ObjectLiteralExpression,\n tables: AppCodeGenTables,\n dbPath: string,\n) => {\n const spaces = getTablesListSpaces(content, object);\n\n let imports = '';\n let tablesList = '';\n const prependComma =\n object.properties.length && !object.properties.hasTrailingComma;\n const tablesListNewLine = content\n .slice(object.properties.end, object.end)\n .includes('\\n');\n\n const tablesArr = Object.values(tables);\n for (let i = 0; i < tablesArr.length; i++) {\n const { path, className, key } = tablesArr[i];\n const importPath = getImportPath(dbPath, path);\n\n imports += `\\nimport { ${className} } from '${importPath}';`;\n\n tablesList += `${\n i === 0 && prependComma ? ',' : ''\n }\\n${spaces} ${key}: ${className},`;\n\n if (i === tablesArr.length - 1 && !tablesListNewLine) {\n tablesList += `\\n${spaces}`;\n }\n }\n\n if (!imports.length) return;\n\n let importPos = 0;\n for (const node of statements) {\n if (node.kind === SyntaxKind.ImportDeclaration) {\n importPos = node.end;\n }\n }\n\n return {\n imports: { pos: importPos, text: imports },\n tablesList: { pos: object.properties.end, text: tablesList },\n };\n};\n\nconst getTablesListSpaces = (content: string, object: Expression): string => {\n const lines = content.slice(0, object.end).split('\\n');\n const last = lines[lines.length - 1];\n return last.match(/^\\s+/)?.[0] || '';\n};\n\nconst getOrchidOrmArgs = (\n importName: string,\n statements: NodeArray<Statement>,\n): { config: Expression; tablesList: ObjectLiteralExpression } => {\n for (const v of statements) {\n if (v.kind !== SyntaxKind.VariableStatement) continue;\n\n for (const node of (v as VariableStatement).declarationList.declarations) {\n const call = node.initializer as CallExpression;\n if (call?.kind !== SyntaxKind.CallExpression) continue;\n\n if (call.expression.getText() !== importName) continue;\n\n if (call.arguments.length !== 2) {\n throw new Error(\n 'Invalid number of arguments when initializing orchid orm',\n );\n }\n\n const object = call.arguments[1] as ObjectLiteralExpression;\n if (object?.kind !== SyntaxKind.ObjectLiteralExpression) {\n throw new Error(\n 'Second argument of orchidORM must be an object literal',\n );\n }\n\n return { config: call.arguments[0], tablesList: object };\n }\n }\n\n throw new Error('List of tables is not found in main file');\n};\n\nconst addChange = (\n content: string,\n changes: Change[],\n at: number,\n text: string,\n end = at,\n) => {\n if (changes.length === 0) {\n changes.push([0, at], text, [end, content.length]);\n } else {\n const last = changes[changes.length - 1] as [number, number];\n last[1] = at;\n changes.push(text, [end, content.length]);\n }\n};\n\nconst replaceContent = (\n content: string,\n changes: Change[],\n from: number,\n to: number,\n text: string,\n) => {\n addChange(content, changes, from, text, to);\n};\n\nconst applyChanges = (content: string, changes: Change[]) => {\n return changes.length\n ? changes\n .map((item) =>\n typeof item === 'string' ? item : content.slice(item[0], item[1]),\n )\n .join('')\n : content;\n};\n","import { Adapter, AdapterOptions, DbExtension } from 'pqb';\nimport {\n AnyRakeDbConfig,\n makeFileVersion,\n makeStructureToAstCtx,\n RakeDbAst,\n saveMigratedVersion,\n SilentQueries,\n structureToAst,\n} from 'rake-db';\nimport { pathToLog } from 'orchid-core';\nimport fs from 'fs/promises';\nimport path from 'node:path';\nimport {\n AppCodeGenTable,\n appCodeGenTable,\n AppCodeGenTables,\n getTableInfosAndFKeys,\n} from './appCodeGenerators/tables.appCodeGenerator';\nimport { appCodeGenUpdateDbFile } from './appCodeGenerators/dbFile.appCodeGenerator';\nimport { generate } from '../generate/generate';\n\nexport const pull = async (\n options: AdapterOptions[],\n config: AnyRakeDbConfig,\n) => {\n if (!config.dbPath || !config.baseTable) {\n throw new Error(\n `\\`${\n config.dbPath ? 'baseTable' : 'dbPath'\n }\\` setting must be set in the migrations config for pull command`,\n );\n }\n\n const baseTablePath = config.baseTable.getFilePath();\n const baseTableExportedAs = config.baseTable.exportAs;\n\n const adapters = options.map((opts) => new Adapter(opts));\n const [adapter] = adapters;\n const currentSchema = adapter.schema || 'public';\n\n const ctx = makeStructureToAstCtx(config, currentSchema);\n\n const asts = await structureToAst(ctx, adapter, config);\n\n const { tableInfos, fkeys } = getTableInfosAndFKeys(asts, config);\n\n const exclusiveWriteOptions = { flag: 'wx' as const };\n const pendingFileWrites: [\n path: string,\n content: string,\n options?: { flag: 'wx' },\n ][] = [];\n\n const tables: AppCodeGenTables = {};\n const extensions: DbExtension[] = [];\n const domains: RakeDbAst.Domain[] = [];\n\n let firstTable: undefined | AppCodeGenTable;\n for (const ast of asts) {\n switch (ast.type) {\n case 'table': {\n const table = appCodeGenTable(\n tableInfos,\n fkeys,\n ast,\n baseTablePath,\n baseTableExportedAs,\n );\n tables[table.key] = table;\n if (!firstTable) firstTable = table;\n pendingFileWrites.push([\n table.path,\n table.content,\n exclusiveWriteOptions,\n ]);\n break;\n }\n case 'extension': {\n extensions.push({\n name: ast.schema ? `${ast.schema}.${ast.name}` : ast.name,\n version: ast.version,\n });\n break;\n }\n case 'domain': {\n domains.push(ast);\n break;\n }\n }\n }\n\n if (!firstTable && !extensions.length && !domains.length) {\n await adapter.close();\n return;\n }\n\n let dbPath = path.resolve(config.basePath, config.dbPath);\n if (!dbPath.endsWith('.ts')) dbPath += '.ts';\n const content = await appCodeGenUpdateDbFile(\n dbPath,\n tables,\n extensions,\n domains,\n );\n if (content) pendingFileWrites.push([dbPath, content]);\n\n if (firstTable) {\n await fs.mkdir(path.dirname(firstTable.path), { recursive: true });\n }\n\n await Promise.all(\n pendingFileWrites.map(([path, content, options]) =>\n fs.writeFile(path, content, options).then(() => {\n config.logger?.log(`Created ${pathToLog(path)}`);\n }),\n ),\n );\n\n const version = await makeFileVersion({}, config);\n await generate(options, config, ['pull'], { adapter, version });\n\n // save migrated version into all configured databases\n await Promise.all(\n adapters.map(async (adapter) => {\n const silentAdapter = adapter as unknown as SilentQueries;\n silentAdapter.silentArrays = adapter.arrays;\n await saveMigratedVersion(silentAdapter, version, 'pull.ts', config);\n await adapter.close();\n }),\n );\n};\n","import { rakeDbCommands } from 'rake-db';\nimport { generate } from './generate/generate';\nimport { pull } from './pull/pull';\nimport { ColumnSchemaConfig } from 'orchid-core';\nimport { DefaultColumnTypes, DefaultSchemaConfig } from 'pqb';\n\nrakeDbCommands.g = rakeDbCommands.generate = {\n run: generate,\n help: 'gen migration from OrchidORM tables',\n helpArguments: {\n 'no arguments': '\"generated\" is a default file name',\n 'migration-name': 'set migration file name',\n up: 'auto-apply migration',\n 'migration-name up': 'with a custom name and apply it',\n },\n helpAfter: 'reset',\n};\n\nrakeDbCommands.pull.run = pull;\nrakeDbCommands.pull.help =\n 'generate ORM tables and a migration for an existing database';\n\ndeclare module 'rake-db' {\n export interface RakeDbConfig<\n SchemaConfig extends ColumnSchemaConfig,\n CT = DefaultColumnTypes<DefaultSchemaConfig>,\n > {\n dbPath?: string;\n dbExportedAs?: string;\n generateTableTo?(tableName: string): string;\n }\n\n export interface InputRakeDbConfigBase<\n SchemaConfig extends ColumnSchemaConfig,\n CT,\n > {\n dbPath?: string;\n dbExportedAs?: string;\n generateTableTo?(tableName: string): string;\n }\n}\n"],"names":["inDb","name","promptSelect","colors","item","getSchemaAndTableFromName","__spreadValues","getDbTableColumnsChecks","dbColumnToAst","toSnakeCase","index","column","instantiateDbColumn","ArrayColumn","type","DomainColumn","EnumColumn","deepCompare","concatSchemaAndName","key","encodeColumnDefault","__spreadProps","RawSQL","codeEnum","toArray","i","getIndexName","getConstraintName","_a","tableToAst","codeTable","getDbStructureTableData","VirtualColumn","makeDomainsMap","astToMigration","createMigrationInterface","introspectDbSchema","pluralize","changes","code","addCode","exhaustive","codeToString","makeStructureToAstCtx","makeFileVersion","writeMigrationFile","migrate","pathToFileURL","path","UnknownColumn","defaultSchemaConfig","toCamelCase","toPascalCase","getImportPath","singleQuote","columnsShapeToCode","pushTableDataCode","quoteObjectKey","Adapter","structureToAst","content","options","pathToLog","adapter","saveMigratedVersion","rakeDbCommands"],"mappings":";;;;;;;;;;AAkBa,MAAA,qBAAA,GAAwB,OACnC,gBAAA,EACA,OACG,KAAA;AACH,EAAA,IAAI,iBAAiB,MAAQ,EAAA;AAC3B,IAAA,IAAI,EAAK,GAAA,CAAA,CAAA;AACT,IAAA,MAAM,OAAQ,CAAA,GAAA;AAAA,MACZ,iBAAiB,GAAI,CAAA,OAAO,EAAE,MAAQ,EAAA,OAAA,EAAS,QAAa,KAAA;AAC1D,QAAA,MAAM,WAAW,CAAgB,aAAA,EAAA,EAAA,EAAA,CAAA,CAAA,CAAA;AACjC,QAAA,MAAM,SAAoB,EAAC,CAAA;AAC3B,QAAI,IAAA;AACF,UAAM,MAAA,GAAA,GAAM,CAAyB,sBAAA,EAAA,QAAA,CAAA,YAAA,EAAuB,OACzD,CAAA,GAAA;AAAA,YACC,CAAC,EAAE,IAAA,EAAAA,KAAM,EAAA,MAAA,IAAU,CACjB,KAAA,CAAA,EAAGA,KAAkB,CAAA,WAAA,EAAA,CAAA,CAAA,IAAA,EAAQ,MAC1B,CAAA,GAAA;AAAA,cACC,CAAC,CAAA,EAAG,CACF,KAAA,CAAA,CAAA,EACE,OAAO,CAAM,KAAA,QAAA,GAAW,CAAI,GAAA,CAAA,CAAE,KAAM,CAAA,EAAE,MAAO,EAAC,eAClC,CAAK,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA;AAAA,aACvB,CACC,KAAK,IAAI,CAAA,CAAA,CAAA;AAAA,WAChB,CACC,IAAK,CAAA,IAAI,CAAU,CAAA,MAAA,EAAA,MAAA,CAAA,CAAA,CAAA,CAAA;AACtB,UAAA,MAAM,QAAQ,KAAM,CAAA,EAAE,IAAM,EAAA,GAAA,EAAK,QAAQ,CAAA,CAAA;AAAA,iBAClC,GAAP,EAAA;AACA,UAAO,MAAA,EAAA,CAAA;AACP,UAAA,OAAA;AAAA,SACF;AAEA,QAAM,MAAA;AAAA,UACJ,IAAM,EAAA,CAAC,EAAE,CAAA,EAAG,CAAA;AAAA,SACd,GAAI,MAAM,OAAQ,CAAA,KAAA;AAAA,UAChB,CAA0B,uBAAA,EAAA,QAAA,CAAA,IAAA,CAAA;AAAA,SAC5B,CAAA;AAEA,QAAM,MAAA,OAAA,CAAQ,KAAM,CAAA,CAAA,UAAA,EAAa,QAAU,CAAA,CAAA,CAAA,CAAA;AAE3C,QAAA,IAAI,GAAM,GAAA,CAAA,CAAA;AACV,QAAA,MAAM,GAAM,GAAA,4CAAA,CAAA;AACZ,QAAI,IAAA,KAAA,CAAA;AACJ,QAAA,IAAI,IAAO,GAAA,EAAA,CAAA;AACX,QAAA,IAAI,KAAQ,GAAA,CAAA,CAAA;AACZ,QAAA,MAAM,UAAU,OAAQ,CAAA,CAAC,EAAE,MAAO,CAAA,GAAA,CAAI,MAAM,IAAI,CAAA,CAAA;AAChD,QAAA,OAAQ,KAAQ,GAAA,GAAA,CAAI,IAAK,CAAA,CAAC,CAAI,EAAA;AAC5B,UAAM,MAAA,GAAA,GAAM,CAAE,CAAA,KAAA,CAAM,GAAK,EAAA,GAAA,CAAI,SAAY,GAAA,KAAA,CAAM,CAAC,CAAA,CAAE,MAAM,CAAA,CAAE,IAAK,EAAA,CAAA;AAC/D,UAAA,MAAM,GAAM,GAAA,KAAA,CAAM,CAAC,CAAA,CAAE,MAAM,GAAG,CAAA,CAAA;AAC9B,UAAI,IAAA,GAAA,CAAI,WAAW,CAAG,EAAA;AACpB,YAAO,IAAA,GAAA,GAAA,CAAA;AACP,YAAQ,KAAA,GAAA,CAAA,CAAA;AAAA,WACH,MAAA;AACL,YAAA,IAAI,SAAS,GAAK,EAAA;AAChB,cAAA,OAAA,CAAQ,KAAK,CAAI,GAAA,KAAA,CAAA;AAAA,aACnB;AACA,YAAA,KAAA,EAAA,CAAA;AAAA,WACF;AACA,UAAA,GAAA,GAAM,GAAI,CAAA,SAAA,CAAA;AAAA,SACZ;AAEA,QAAM,MAAA,aAAA,GAAgB,OAAQ,CAAA,OAAA,CAAQ,IAAI,CAAA,CAAA;AAC1C,QAAO,MAAA,CAAA,aAAA,KAAkB,CAAK,CAAA,GAAA,KAAA,CAAA,GAAY,aAAa,CAAA,CAAA;AAAA,OACxD,CAAA;AAAA,KACH,CAAA;AAAA,GACF;AACF,CAAA,CAAA;AAEO,MAAM,oBAAuB,GAAA,CAClC,IACA,EAAA,IAAA,EACA,MACA,SACoB,KAAA;AACpB,EAAI,IAAA,SAAA;AAAW,IAAA,MAAM,IAAI,WAAY,EAAA,CAAA;AAErC,EAAI,IAAA,OAAA,GAAU,KAAK,MAAS,GAAA,CAAA,CAAA;AAC5B,EAAA,KAAA,MAAW,QAAQ,IAAM,EAAA;AACvB,IAAA,MAAM,KAAQ,GAAA,IAAA,CAAK,MAAS,GAAA,CAAA,GAAI,IAAK,CAAA,MAAA,CAAA;AACrC,IAAA,IAAI,KAAQ,GAAA,OAAA;AAAS,MAAU,OAAA,GAAA,KAAA,CAAA;AAAA,GACjC;AAEA,EAAA,IAAI,GAAM,GAAA,CAAA,CAAA;AACV,EAAM,MAAA,GAAA,GAAM,KAAK,MAAS,GAAA,CAAA,CAAA;AAC1B,EAAA,KAAA,MAAWC,SAAQ,IAAM,EAAA;AACvB,IAAIA,IAAAA,KAAAA,CAAK,MAAS,GAAA,GAAA,GAAM,GAAK,EAAA;AAC3B,MAAA,GAAA,GAAMA,MAAK,MAAS,GAAA,GAAA,CAAA;AAAA,KACtB;AAAA,GACF;AAEA,EAAA,MAAM,gBAAgB,CAAU,OAAA,EAAA,IAAA,CAAA,CAAA,CAAA;AAEhC,EAAA,OAAOC,mBAAa,CAAA;AAAA,IAClB,OAAA,EAAS,oBAAoBC,aAAO,CAAA,QAAA;AAAA,MAClC,IAAA;AAAA,SACG,IAAqB,CAAA,cAAA,EAAA,IAAA,CAAA,CAAA,CAAA;AAAA,IAC1B,OAAS,EAAA;AAAA,MACP,GAAGA,aAAO,CAAA,SAAA,CAAU,GAAG,CAAA,CAAA,CAAA,EAAK,SAASA,aAAO,CAAA,IAAA;AAAA,QAC1C,UAAU,IAAO,CAAA,CAAA,CAAA,QAAA;AAAA,UACf,OAAU,GAAA,aAAA,CAAc,MAAS,GAAA,IAAA,CAAK,MAAS,GAAA,CAAA;AAAA,UAC/C,GAAA;AAAA,SACF;AAAA,OACF,CAAA,CAAA;AAAA,MACA,GAAG,IAAK,CAAA,GAAA;AAAA,QACN,CAAC,MACC,CAAG,EAAAA,aAAA,CAAO,WAAW,GAAG,CAAA,CAAA,CAAA,EAAK,KAAKA,aAAO,CAAA,UAAA;AAAA,UACvC,IAAA;AAAA,SACF,CAAA,CAAA,EAAK,SAASA,aAAO,CAAA,IAAA;AAAA,UACnB,aAAc,CAAA,QAAA;AAAA,YACZ,UAAU,aAAc,CAAA,MAAA,GAAS,CAAE,CAAA,MAAA,GAAS,KAAK,MAAS,GAAA,CAAA;AAAA,YAC1D,GAAA;AAAA,WACF;AAAA,SACF,CAAA,CAAA;AAAA,OACJ;AAAA,KACF;AAAA,GACD,CAAA,CAAA;AACH,CAAA,CAAA;AAEa,MAAA,uBAAA,GAA0B,CACrC,KAAA,EACA,GACG,KAAA;AACH,EAAM,MAAA,IAAA,GAAO,MAAM,GAAG,CAAA,CAAA;AACtB,EAAA,IAAI,IAAM,EAAA;AACR,IACE,OAAA,IAAA,KACC,MAAM,OAAQ,CAAA,IAAI,KAAK,IAAK,CAAA,IAAA,KAAS,KAAS,IAAA,IAAA,CAAK,IAAS,KAAA,MAAA,CAAA,CAAA;AAAA,GAEjE;AAEA,EAAA,KAAA,MAAW,KAAK,KAAO,EAAA;AACrB,IAAMC,MAAAA,KAAAA,GAAO,MAAM,CAAC,CAAA,CAAA;AACpB,IAAA,IACE,KAAM,CAAA,OAAA,CAAQA,KAAI,CAAA,GACdA,KAAK,CAAA,IAAA;AAAA,MACH,CAACA,KACEA,KAAAA,CAAAA,KAAAA,CAAK,IAAS,KAAA,KAAA,IAASA,KAAK,CAAA,IAAA,KAAS,MACtCA,KAAAA,KAAAA,CAAK,IAAK,CAAA,IAAA,CAAK,IAAS,KAAA,GAAA;AAAA,KAC5B,GAAA,CACCA,KAAK,CAAA,IAAA,KAAS,KAASA,IAAAA,KAAAA,CAAK,IAAS,KAAA,MAAA,KACtCA,KAAK,CAAA,IAAA,CAAK,IAAK,CAAA,IAAA,KAAS,GAC5B,EAAA;AACA,MAAO,OAAA,IAAA,CAAA;AAAA,KACT;AAAA,GACF;AAEA,EAAO,OAAA,KAAA,CAAA;AACT,CAAA;;AChKO,MAAM,cAAiB,GAAA,OAC5B,GACA,EAAA,OAAA,EACA,aACA,SACkB,KAAA;AAClB,EAAA,MAAM,gBAA0B,EAAC,CAAA;AACjC,EAAA,MAAM,cAAwB,EAAC,CAAA;AAE/B,EAAA,KAAA,MAAW,UAAU,OAAS,EAAA;AAC5B,IAAA,IAAI,CAAC,WAAA,CAAY,OAAQ,CAAA,QAAA,CAAS,MAAM,CAAG,EAAA;AACzC,MAAA,aAAA,CAAc,KAAK,MAAM,CAAA,CAAA;AAAA,KAC3B;AAAA,GACF;AAEA,EAAW,KAAA,MAAA,MAAA,IAAU,YAAY,OAAS,EAAA;AACxC,IAAA,IAAI,CAAC,OAAQ,CAAA,GAAA,CAAI,MAAM,CAAA,IAAK,WAAW,QAAU,EAAA;AAC/C,MAAA,WAAA,CAAY,KAAK,MAAM,CAAA,CAAA;AAAA,KACzB;AAAA,GACF;AAEA,EAAA,KAAA,MAAW,UAAU,aAAe,EAAA;AAClC,IAAA,IAAI,YAAY,MAAQ,EAAA;AACtB,MAAA,MAAM,QAAQ,MAAM,oBAAA;AAAA,QAClB,QAAA;AAAA,QACA,MAAA;AAAA,QACA,WAAA;AAAA,QACA,SAAA;AAAA,OACF,CAAA;AACA,MAAA,IAAI,KAAO,EAAA;AACT,QAAM,MAAA,IAAA,GAAO,WAAY,CAAA,KAAA,GAAQ,CAAC,CAAA,CAAA;AAClC,QAAY,WAAA,CAAA,MAAA,CAAO,KAAQ,GAAA,CAAA,EAAG,CAAC,CAAA,CAAA;AAE/B,QAAyB,wBAAA,CAAA,WAAA,CAAY,MAAQ,EAAA,IAAA,EAAM,MAAM,CAAA,CAAA;AACzD,QAAyB,wBAAA,CAAA,WAAA,CAAY,KAAO,EAAA,IAAA,EAAM,MAAM,CAAA,CAAA;AACxD,QAAyB,wBAAA,CAAA,WAAA,CAAY,OAAS,EAAA,IAAA,EAAM,MAAM,CAAA,CAAA;AAC1D,QAAyB,wBAAA,CAAA,WAAA,CAAY,WAAa,EAAA,IAAA,EAAM,MAAM,CAAA,CAAA;AAC9D,QAAyB,wBAAA,CAAA,WAAA,CAAY,QAAU,EAAA,IAAA,EAAM,MAAM,CAAA,CAAA;AAC3D,QAAyB,wBAAA,CAAA,WAAA,CAAY,KAAO,EAAA,IAAA,EAAM,MAAM,CAAA,CAAA;AACxD,QAAyB,wBAAA,CAAA,WAAA,CAAY,OAAS,EAAA,IAAA,EAAM,MAAM,CAAA,CAAA;AAC1D,QAAyB,wBAAA,CAAA,WAAA,CAAY,UAAY,EAAA,IAAA,EAAM,MAAM,CAAA,CAAA;AAE7D,QAAW,KAAA,MAAA,KAAA,IAAS,YAAY,MAAQ,EAAA;AACtC,UAAW,KAAA,MAAA,MAAA,IAAU,MAAM,OAAS,EAAA;AAClC,YAAI,IAAA,MAAA,CAAO,eAAe,IAAM,EAAA;AAC9B,cAAA,MAAA,CAAO,UAAa,GAAA,MAAA,CAAA;AAAA,aACtB;AAAA,WACF;AAAA,SACF;AAEA,QAAA,GAAA,CAAI,IAAK,CAAA;AAAA,UACP,IAAM,EAAA,cAAA;AAAA,UACN,IAAA;AAAA,UACA,EAAI,EAAA,MAAA;AAAA,SACL,CAAA,CAAA;AACD,QAAA,SAAA;AAAA,OACF;AAAA,KACF;AAEA,IAAA,GAAA,CAAI,IAAK,CAAA;AAAA,MACP,IAAM,EAAA,QAAA;AAAA,MACN,MAAQ,EAAA,QAAA;AAAA,MACR,IAAM,EAAA,MAAA;AAAA,KACP,CAAA,CAAA;AAAA,GACH;AAEA,EAAA,KAAA,MAAW,UAAU,WAAa,EAAA;AAChC,IAAA,GAAA,CAAI,IAAK,CAAA;AAAA,MACP,IAAM,EAAA,QAAA;AAAA,MACN,MAAQ,EAAA,MAAA;AAAA,MACR,IAAM,EAAA,MAAA;AAAA,KACP,CAAA,CAAA;AAAA,GACH;AACF,CAAA,CAAA;AAEA,MAAM,wBAA2B,GAAA,CAC/B,KACA,EAAA,IAAA,EACA,EACG,KAAA;AACH,EAAA,KAAA,MAAW,QAAQ,KAAO,EAAA;AACxB,IAAI,IAAA,IAAA,CAAK,eAAe,IAAM,EAAA;AAC5B,MAAA,IAAA,CAAK,UAAa,GAAA,EAAA,CAAA;AAAA,KACpB;AAAA,GACF;AACF,CAAA;;;;;;;;;;;;;;;;;;AC3EO,MAAM,iBAAoB,GAAA,CAC/B,GACA,EAAA,WAAA,EACA,eACA,UACG,KAAA;AAlBL,EAAA,IAAA,EAAA,CAAA;AAmBE,EAAA,MAAM,cAAiB,GAAA,UAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAY,GAAI,CAAA,CAAC,GAAmB,KAAA;AACzD,IAAA,MAAM,CAAC,MAAQ,EAAA,IAAI,CAAI,GAAAC,gCAAA,CAA0B,IAAI,IAAI,CAAA,CAAA;AACzD,IAAA,OAAO,EAAE,MAAA,EAAQ,IAAM,EAAA,OAAA,EAAS,IAAI,OAAQ,EAAA,CAAA;AAAA,GAC9C,CAAA,CAAA;AAEA,EAAW,KAAA,MAAA,KAAA,IAAS,YAAY,UAAY,EAAA;AAC1C,IAAA,IAAI,cAAgB,EAAA;AAClB,MAAA,IAAI,KAAQ,GAAA,KAAA,CAAA;AACZ,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,cAAA,CAAe,QAAQ,CAAK,EAAA,EAAA;AAC9C,QAAM,MAAA,OAAA,GAAU,eAAe,CAAC,CAAA,CAAA;AAChC,QAAA,IACE,MAAM,IAAS,KAAA,OAAA,CAAQ,IACvB,IAAA,KAAA,CAAM,iBAAgB,EAAQ,GAAA,OAAA,CAAA,MAAA,KAAR,IAAkB,GAAA,EAAA,GAAA,aAAA,CAAA,KACvC,CAAC,OAAQ,CAAA,OAAA,IAAW,OAAQ,CAAA,OAAA,KAAY,MAAM,OAC/C,CAAA,EAAA;AACA,UAAQ,KAAA,GAAA,IAAA,CAAA;AACR,UAAe,cAAA,CAAA,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA;AAC1B,UAAA,MAAA;AAAA,SACF;AAAA,OACF;AAEA,MAAI,IAAA,KAAA;AAAO,QAAA,SAAA;AAAA,KACb;AAEA,IAAA,GAAA,CAAI,IAAK,CAAA;AAAA,MACP,IAAM,EAAA,WAAA;AAAA,MACN,MAAQ,EAAA,MAAA;AAAA,MACR,MAAQ,EAAA,KAAA,CAAM,UAAe,KAAA,aAAA,GAAgB,SAAY,KAAM,CAAA,UAAA;AAAA,MAC/D,MAAM,KAAM,CAAA,IAAA;AAAA,MACZ,SAAS,KAAM,CAAA,OAAA;AAAA,KAChB,CAAA,CAAA;AAAA,GACH;AAEA,EAAA,IAAI,iDAAgB,MAAQ,EAAA;AAC1B,IAAI,GAAA,CAAA,IAAA;AAAA,MACF,GAAG,cAAA,CAAe,GAAI,CAAA,CAAC,GAAS,KAAAC,gBAAA,CAAA;AAAA,QAC9B,IAAM,EAAA,WAAA;AAAA,QACN,MAAQ,EAAA,QAAA;AAAA,OAAA,EACL,GACH,CAAA,CAAA;AAAA,KACJ,CAAA;AAAA,GACF;AACF,CAAA;;;;;;;;;;;;;;;;;;;;;ACnBO,MAAM,cAAiB,GAAA,OAC5B,OACA,EAAA,MAAA,EACA,iBACA,EAAA,WAAA,EACA,UACA,EAAA,eAAA,EACA,GACA,EAAA,aAAA,EACA,UACA,EAAA,cAAA,EACA,SACG,KAAA;AACH,EAAM,MAAA,EAAE,SAAY,GAAA,eAAA,CAAA;AACpB,EAAA,MAAM,YAAY,MAAO,CAAA,WAAA;AAAA,IACvB,OAAA,CAAQ,QAAQ,GAAI,CAAA,CAAC,WAAW,CAAC,MAAA,CAAO,IAAM,EAAA,MAAM,CAAC,CAAA;AAAA,GACvD,CAAA;AAEA,EAAA,MAAM,EAAE,YAAA,EAAc,aAAe,EAAA,eAAA,EAAoB,GAAA,YAAA;AAAA,IACvD,iBAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,eAAA;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,kBAAA;AAAA,IACJ,MAAA;AAAA,IACA,WAAA;AAAA,IACA,eAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,eAAA;AAAA,IACA,SAAA;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,aAAA;AAAA,IACJ,OAAA;AAAA,IACA,MAAA;AAAA,IACA,iBAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,GAAA;AAAA,IACA,aAAA;AAAA,IACA,SAAA;AAAA,IACA,eAAA;AAAA,IACA,UAAA;AAAA,IACA,eAAA;AAAA,IACA,cAAA;AAAA,IACA,SAAA;AAAA,GACF,CAAA;AAEA,EAAA,WAAA,CAAY,iBAAiB,aAAa,CAAA,CAAA;AAC5C,CAAA,CAAA;AAIA,MAAM,eAAe,CACnB,iBAAA,EACA,WACA,EAAA,UAAA,EACA,WACA,eAKG,KAAA;AA7GL,EAAA,IAAA,EAAA,CAAA;AA8GE,EAAA,MAAM,eAAsD,EAAC,CAAA;AAC7D,EAAA,MAAM,gBAAuD,EAAC,CAAA;AAC9D,EAAM,MAAA,eAAA,uBAAuC,GAAI,EAAA,CAAA;AACjD,EAAM,MAAA,uBAAA,uBAA8B,GAAkB,EAAA,CAAA;AAEtD,EAAA,MAAM,EAAE,SAAA,EAAW,OAAS,EAAA,WAAA,EAAgB,GAAA,eAAA,CAAA;AAC5C,EAAM,MAAA,MAAA,GAASC,8BAAwB,CAAA,eAAA,CAAgB,WAAW,CAAA,CAAA;AAElE,EAAW,KAAA,MAAA,GAAA,IAAO,UAAU,KAAO,EAAA;AACjC,IAAM,MAAA,MAAA,GAAS,SAAU,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAElC,IAAA,IAAI,CAAC,MAAO,CAAA,QAAA;AAAU,MAAA,SAAA;AAEtB,IAAA,MAAM,IAAO,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,IAAK,CAAA,IAAA,KAAZ,IAAoB,GAAA,EAAA,GAAA,GAAA,CAAA;AACjC,IAAI,IAAA,SAAA,CAAU,IAAI,CAAG,EAAA;AACnB,MAAA,eAAA,CAAgB,IAAI,GAAK,EAAA,EAAE,KAAK,MAAQ,EAAA,IAAA,EAAM,QAAQ,CAAA,CAAA;AACtD,MAAwB,uBAAA,CAAA,GAAA,CAAI,MAAM,IAAI,CAAA,CAAA;AAAA,KACjC,MAAA;AACL,MAAA,YAAA,CAAa,IAAK,CAAA,EAAE,GAAK,EAAA,MAAA,EAAQ,CAAA,CAAA;AAAA,KACnC;AAAA,GACF;AAEA,EAAA,KAAA,MAAW,QAAQ,SAAW,EAAA;AAC5B,IAAI,IAAA,uBAAA,CAAwB,IAAI,IAAI,CAAA;AAAG,MAAA,SAAA;AAEvC,IAAM,MAAA,CAAC,GAAK,EAAA,MAAM,CAAI,GAAAC,oBAAA;AAAA,MACpB,iBAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA,OAAQ,CAAA,IAAA;AAAA,MACR,UAAU,IAAI,CAAA;AAAA,MACd,OAAA;AAAA,MACA,WAAA;AAAA,MACA,MAAA;AAAA,KACF,CAAA;AAEA,IAAA,aAAA,CAAc,IAAK,CAAA,EAAE,GAAK,EAAA,MAAA,EAAQ,CAAA,CAAA;AAAA,GACpC;AAEA,EAAO,OAAA;AAAA,IACL,YAAA;AAAA,IACA,aAAA;AAAA,IACA,eAAA;AAAA,GACF,CAAA;AACF,CAAA,CAAA;AAEA,MAAM,kBAAA,GAAqB,OACzB,MAAA,EACA,WACA,EAAA;AAAA,EACE,WAAA;AAAA,EACA,MAAA;AAAA,EACA,cAAgB,EAAA,EAAE,IAAM,EAAA,SAAA,EAAW,KAAM,EAAA;AAC3C,CACA,EAAA,YAAA,EACA,aACA,EAAA,eAAA,EACA,SACG,KAAA;AAxKL,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAyKE,EAAA,KAAA,MAAW,EAAE,GAAA,EAAK,MAAO,EAAA,IAAK,YAAc,EAAA;AAC1C,IAAA,IAAI,cAAc,MAAQ,EAAA;AACxB,MAAA,MAAM,QAAW,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,IAAK,CAAA,IAAA,KAAZ,IAAoB,GAAA,EAAA,GAAA,GAAA,CAAA;AACrC,MAAA,MAAM,QAAQ,MAAM,oBAAA;AAAA,QAClB,QAAA;AAAA,QACA,QAAA;AAAA,QACA,aAAc,CAAA,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,GAAG,CAAA;AAAA,QAC9B,SAAA;AAAA,OACF,CAAA;AACA,MAAA,IAAI,KAAO,EAAA;AACT,QAAM,MAAA,IAAA,GAAO,aAAc,CAAA,KAAA,GAAQ,CAAC,CAAA,CAAA;AACpC,QAAc,aAAA,CAAA,MAAA,CAAO,KAAQ,GAAA,CAAA,EAAG,CAAC,CAAA,CAAA;AAEjC,QAAA,MAAM,QAAO,EAAK,GAAA,IAAA,CAAA,MAAA,CAAO,IAAK,CAAA,IAAA,KAAjB,YAAyB,IAAK,CAAA,GAAA,CAAA;AAC3C,QAAA,eAAA,CAAgB,IAAI,IAAM,EAAA;AAAA,UACxB,GAAA;AAAA,UACA,MAAQ,EAAA,IAAA;AAAA,UACR,MAAA,EAAQ,MAAO,CAAA,IAAA,CAAK,QAAQ,CAAA;AAAA,SAC7B,CAAA,CAAA;AAED,QAAA,MAAM,EAAK,GAAA,MAAA,CAAO,SAAY,GAAAC,sBAAA,CAAY,GAAG,CAAI,GAAA,GAAA,CAAA;AAEjD,QAAA,IAAI,YAAY,UAAY,EAAA;AAC1B,UAAA,YAAA,CAAa,WAAY,CAAA,UAAA,CAAW,OAAS,EAAA,IAAA,EAAM,EAAE,CAAA,CAAA;AAAA,SACvD;AAEA,QAAWC,KAAAA,MAAAA,MAAAA,IAAS,YAAY,OAAS,EAAA;AACvC,UAAWC,KAAAA,MAAAA,OAAAA,IAAUD,OAAM,OAAS,EAAA;AAClC,YAAA,IAAI,QAAYC,IAAAA,OAAAA,IAAUA,OAAO,CAAA,MAAA,KAAW,IAAM,EAAA;AAChD,cAAAA,QAAO,MAAS,GAAA,EAAA,CAAA;AAAA,aAClB;AAAA,WACF;AAAA,SACF;AAEA,QAAW,KAAA,MAAA,CAAA,IAAK,YAAY,WAAa,EAAA;AACvC,UAAI,IAAA,CAAA,EAAA,GAAA,CAAA,CAAE,KAAF,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAS,OAAS,EAAA;AACpB,YAAA,YAAA,CAAa,CAAE,CAAA,KAAA,CAAM,OAAS,EAAA,IAAA,EAAM,EAAE,CAAA,CAAA;AAAA,WACxC;AACA,UAAA,IAAI,EAAE,UAAY,EAAA;AAChB,YAAA,YAAA,CAAa,CAAE,CAAA,UAAA,CAAW,OAAS,EAAA,IAAA,EAAM,EAAE,CAAA,CAAA;AAAA,WAC7C;AAAA,SACF;AAEA,QAAW,KAAA,MAAA,CAAA,IAAK,YAAY,WAAa,EAAA;AACvC,UACE,IAAA,CAAA,CAAE,cACF,CAAE,CAAA,UAAA,CAAW,kBAAkB,MAC/B,IAAA,CAAA,CAAE,UAAW,CAAA,YAAA,KAAiB,SAC9B,EAAA;AACA,YAAA,YAAA,CAAa,CAAE,CAAA,UAAA,CAAW,cAAgB,EAAA,IAAA,EAAM,EAAE,CAAA,CAAA;AAAA,WACpD;AAAA,SACF;AAEA,QAAA,SAAA;AAAA,OACF;AAAA,KACF;AAEA,IAAA,KAAA,CAAM,GAAG,CAAI,GAAA;AAAA,MACX,IAAM,EAAA,KAAA;AAAA,MACN,IAAM,EAAA,MAAA;AAAA,KACR,CAAA;AAAA,GACF;AACF,CAAA,CAAA;AAEA,MAAM,WAAA,GAAc,CAClB,EAAE,cAAA,EAAgB,EAAE,KAAM,EAAA,IAC1B,aACG,KAAA;AACH,EAAA,KAAA,MAAW,EAAE,GAAA,EAAK,MAAO,EAAA,IAAK,aAAe,EAAA;AAC3C,IAAA,KAAA,CAAM,GAAG,CAAI,GAAA;AAAA,MACX,IAAM,EAAA,MAAA;AAAA,MACN,IAAM,EAAA,MAAA;AAAA,KACR,CAAA;AAAA,GACF;AACF,CAAA,CAAA;AAEA,MAAM,aAAgB,GAAA,OACpB,OACA,EAAA,MAAA,EACA,mBACA,WACA,EAAA,UAAA,EACA,GACA,EAAA,aAAA,EACA,SACA,EAAA,eAAA,EACA,UACA,EAAA,eAAA,EACA,gBACA,SACG,KAAA;AAnQL,EAAA,IAAA,EAAA,CAAA;AAoQE,EAAW,KAAA,MAAA;AAAA,IACT,GAAA;AAAA,IACA,EAAE,GAAA,EAAK,OAAS,EAAA,MAAA,EAAQ,QAAQ,UAAW,EAAA;AAAA,OACxC,eAAiB,EAAA;AACpB,IAAM,MAAA,iBAAA,GAAoB,UAAU,MAAM,CAAA,CAAA;AAE1C,IAAA,MAAM,QAAW,GAAAC,0BAAA;AAAA,MACf,iBAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA,iBAAA;AAAA,KACF,CAAA;AAEA,IAAA,MAAM,SAAS,MAAM,cAAA;AAAA,MACnB,OAAA;AAAA,MACA,UAAA;AAAA,MACA,GAAA;AAAA,MACA,aAAA;AAAA,MACA,UAAA;AAAA,MACA,eAAA;AAAA,MACA,cAAA;AAAA,MACA,SAAA;AAAA,MACA,GAAA;AAAA,MACA,MAAA;AAAA,MACA,QAAA;AAAA,MACA,UAAA;AAAA,KACF,CAAA;AAEA,IAAA,IAAI,WAAW,QAAU,EAAA;AACvB,MAAA,YAAA,CAAa,eAAiB,EAAA,GAAA,EAAK,MAAQ,EAAA,QAAA,EAAU,UAAU,CAAA,CAAA;AAAA,KACjE,MAAA,IAAW,WAAW,UAAY,EAAA;AAChC,MAAgB,eAAA,CAAA,cAAA,CAAe,KAAM,CAAA,GAAG,CAAI,GAAA;AAAA,QAC1C;AAAA,UACE,IAAM,EAAA,MAAA;AAAA,UACN,IAAM,EAAA,QAAA;AAAA,SACR;AAAA,QACA;AAAA,UACE,IAAM,EAAA,KAAA;AAAA,UACN,IAAM,EAAA,UAAA;AAAA,SACR;AAAA,OACF,CAAA;AAAA,KACF,MAAA,IAAW,WAAW,UAAY,EAAA;AAChC,MAAA,MAAM,EAAK,GAAA,CAAA,EAAA,GAAA,UAAA,CAAW,IAAK,CAAA,IAAA,KAAhB,IAAwB,GAAA,EAAA,GAAA,OAAA,CAAA;AACnC,MAAA,IAAI,WAAW,EAAI,EAAA;AACjB,QAAgB,eAAA,CAAA,cAAA,CAAe,KAC7B,CAAA,MAAA,CAAO,SACH,GAAA,MAAA,KAAWH,sBAAY,CAAA,OAAO,CAC5B,GAAA,OAAA,GACA,MACF,GAAA,MACN,CAAI,GAAA;AAAA,UACF,IAAM,EAAA,QAAA;AAAA,UACN,IAAA,EAAM,OAAO,SACT,GAAA,EAAA,KAAOA,uBAAY,OAAO,CAAA,GACxB,UACA,EACF,GAAA,EAAA;AAAA,SACN,CAAA;AAAA,OACF;AAAA,KACF;AAAA,GACF;AACF,CAAA,CAAA;AAEA,MAAM,cAAiB,GAAA,OACrB,OACA,EAAA,UAAA,EACA,GACA,EAAA,aAAA,EACA,UACA,EAAA,eAAA,EACA,cACA,EAAA,SAAA,EACA,GACA,EAAA,MAAA,EACA,UACA,UAC+C,KAAA;AAhVjD,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAiVE,EAAM,MAAA,MAAA,GAAS,eAAgB,CAAA,QAAA,EAAU,aAAa,CAAA,CAAA;AACtD,EAAM,MAAA,QAAA,GAAW,eAAgB,CAAA,UAAA,EAAY,aAAa,CAAA,CAAA;AAE1D,EAAI,IAAA,QAAA,YAAoBI,eAAe,IAAA,UAAA,YAAsBA,eAAa,EAAA;AACxE,IAAA,QAAA,GAAW,SAAS,IAAK,CAAA,IAAA,CAAA;AACzB,IAAA,UAAA,GAAa,WAAW,IAAK,CAAA,IAAA,CAAA;AAAA,GAC/B;AAEA,EAAA,IAAI,WAAW,QAAU,EAAA;AACvB,IAAA,IAAI,YAAY,cAAe,CAAA,KAAA,CAAA;AAC/B,IAAA,IAAI,CAAC,SAAW,EAAA;AACd,MAAA,MAAM,EAAE,IAAA,EAAS,GAAA,MAAM,QAAQ,MAAO,CAAA,CAAA;AAAA;AAAA;AAAA,uCAGJ,CAAA,CAAA,CAAA;AAElC,MAAM,MAAA,eAAA,uBAAsB,GAAyB,EAAA,CAAA;AACrD,MAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,MAAM,CAAA,IAAK,IAAM,EAAA;AACnC,QAAM,MAAA,GAAA,GAAM,eAAgB,CAAA,GAAA,CAAI,MAAM,CAAA,CAAA;AACtC,QAAA,IAAI,GAAK,EAAA;AACP,UAAA,GAAA,CAAI,IAAI,MAAM,CAAA,CAAA;AAAA,SACT,MAAA;AACL,UAAA,eAAA,CAAgB,IAAI,MAAQ,kBAAA,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA,CAAA;AAAA,SAC/C;AAAA,OACF;AAEA,MAAA,SAAA,uBAAgB,GAAyB,EAAA,CAAA;AACzC,MAAA,KAAA,MAAW,CAAC,IAAM,EAAA,SAAS,CAAK,IAAA,eAAA,CAAgB,SAAW,EAAA;AACzD,QAAM,MAAA,GAAA,GAAM,IAAI,GAAA,CAAY,SAAS,CAAA,CAAA;AACrC,QAAU,SAAA,CAAA,GAAA,CAAI,MAAM,GAAG,CAAA,CAAA;AAEvB,QAAA,KAAA,MAAW,WAAW,SAAW,EAAA;AAC/B,UAAM,MAAA,MAAA,GAAS,eAAgB,CAAA,GAAA,CAAI,OAAO,CAAA,CAAA;AAC1C,UAAA,IAAI,MAAQ,EAAA;AACV,YAAA,KAAA,MAAWC,SAAQ,MAAQ,EAAA;AACzB,cAAA,GAAA,CAAI,IAAIA,KAAI,CAAA,CAAA;AAAA,aACd;AAAA,WACF;AAAA,SACF;AAAA,OACF;AAEA,MAAA,cAAA,CAAe,KAAQ,GAAA,SAAA,CAAA;AAAA,KACzB;AAEA,IAAM,MAAA,UAAA,GACJ,oBAAoBC,gBAChB,GAAA,CAAA,EAAA,GAAA,UAAA,CAAW,SAAS,QAAQ,CAAA,KAA5B,mBAA+B,QAC/B,GAAA,MAAA,CAAA;AAEN,IAAM,MAAA,YAAA,GACJ,sBAAsBA,gBAClB,GAAA,CAAA,EAAA,GAAA,UAAA,CAAW,WAAW,QAAQ,CAAA,KAA9B,mBAAiC,QACjC,GAAA,QAAA,CAAA;AAEN,IAAA,IAAI,GAAC,EAAU,GAAA,SAAA,CAAA,GAAA,CAAI,UAAU,CAAxB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAA2B,IAAI,YAAe,CAAA,CAAA,EAAA;AACjD,MAAA,IACE,EAAE,QAAA,YAAoBC,cACtB,CAAA,IAAA,EAAE,UAAsB,YAAAA,cAAA,CAAA,IACxB,CAACC,sBAAA,CAAY,QAAS,CAAA,OAAA,EAAS,UAAW,CAAA,OAAO,CACjD,EAAA;AACA,QAAI,IAAA,SAAA;AAAW,UAAA,MAAM,IAAI,WAAY,EAAA,CAAA;AAErC,QAAM,MAAA,SAAA,GAAYC,0BAAoB,CAAA,eAAA,CAAgB,cAAc,CAAA,CAAA;AACpE,QAAM,MAAA,KAAA,GAAQ,MAAMhB,mBAAa,CAAA;AAAA,UAC/B,OAAS,EAAA,CAAA,oBAAA,EAAuB,SAAsB,CAAA,UAAA,EAAA,GAAA,CAAA,MAAA,EAAY,MAAa,CAAA,IAAA,EAAA,QAAA,CAAA,CAAA;AAAA,UAC/E,OAAS,EAAA;AAAA,YACP,GAAGC,aAAO,CAAA,UAAA;AAAA,cACR,CAAA,GAAA,CAAA;AAAA,4DAC8CA,aAAO,CAAA,GAAA;AAAA,cACrD,MAAA;AAAA,aACF,CAAA,CAAA;AAAA,YACA,CAAA,wBAAA,CAAA;AAAA,WACF;AAAA,SACD,CAAA,CAAA;AACD,QAAA,IAAI,KAAO,EAAA;AACT,UAAA,MAAM,IAAI,WAAY,EAAA,CAAA;AAAA,SACxB;AAEA,QAAS,QAAA,CAAA,IAAA,CAAK,IAAO,GAAA,UAAA,CAAW,IAAK,CAAA,IAAA,CAAA;AACrC,QAAO,OAAA,UAAA,CAAA;AAAA,OACT;AAAA,KACF;AAEA,IAAO,OAAA,QAAA,CAAA;AAAA,GACT;AAEA,EAAA,MAAM,SAAS,QAAS,CAAA,IAAA,CAAA;AACxB,EAAA,MAAM,WAAW,UAAW,CAAA,IAAA,CAAA;AAE5B,EAAA,KAAA,MAAWgB,IAAO,IAAA,CAAC,YAAc,EAAA,SAAS,CAAG,EAAA;AAC3C,IAAA,IAAI,MAAOA,CAAAA,IAAG,CAAM,KAAA,QAAA,CAASA,IAAG,CAAG,EAAA;AACjC,MAAO,OAAA,QAAA,CAAA;AAAA,KACT;AAAA,GACF;AAEA,EAAA,KAAA,MAAWA,IAAO,IAAA;AAAA,IAChB,UAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,kBAAA;AAAA,IACA,cAAA;AAAA,IACA,mBAAA;AAAA,GACC,EAAA;AAGD,IAAA,IAAIA,QAAO,QAAY,IAAA,MAAA,CAAOA,IAAG,CAAM,KAAA,QAAA,CAASA,IAAG,CAAG,EAAA;AACpD,MAAO,OAAA,QAAA,CAAA;AAAA,KACT;AAAA,GACF;AAEA,EAAA,IACE,CAACF,sBAAA;AAAA,IACC,MAAO,CAAA,QAAA;AAAA,IACP,SAAS,QACL,GAAAX,gBAAA,CAAA;AAAA,MACE,MAAQ,EAAA,KAAA;AAAA,MACR,KAAO,EAAA,CAAA;AAAA,MACP,SAAW,EAAA,CAAA;AAAA,MACX,KAAO,EAAA,CAAA;AAAA,MACP,KAAO,EAAA,KAAA;AAAA,KAAA,EAAA,CACH,EAAS,GAAA,QAAA,CAAA,QAAA,KAAT,IAAqB,GAAA,EAAA,GAAA,EAE3B,CAAA,GAAA,KAAA,CAAA;AAAA,GAEN,EAAA;AACA,IAAO,OAAA,QAAA,CAAA;AAAA,GACT;AAEA,EACE,IAAA,MAAA,CAAO,OAAY,KAAA,KAAA,CAAA,IACnB,MAAO,CAAA,OAAA,KAAY,IACnB,IAAA,QAAA,CAAS,OAAY,KAAA,KAAA,CAAA,IACrB,QAAS,CAAA,OAAA,KAAY,IACrB,EAAA;AACA,IAAM,MAAA,eAAA,GAAkB,WAAW,MAAO,CAAA,MAAA,CAAA;AAC1C,IAAA,MAAM,SAAY,GAAAc,0BAAA;AAAA,MAChB,MAAO,CAAA,OAAA;AAAA,MACP,UAAW,CAAA,MAAA;AAAA,MACX,QAAA;AAAA,KACF,CAAA;AACA,IAAA,MAAM,QAAW,GAAA,UAAA,CAAW,MAAO,CAAA,KAAA,CAAM,eAAe,CAAA,CAAA;AAExD,IAAA,MAAM,WAAc,GAAAA,0BAAA;AAAA,MAClB,QAAS,CAAA,OAAA;AAAA,MACT,UAAW,CAAA,MAAA;AAAA,MACX,UAAA;AAAA,KACF,CAAA;AACA,IAAA,MAAM,UAAa,GAAA,UAAA,CAAW,MAAO,CAAA,KAAA,CAAM,eAAe,CAAA,CAAA;AAE1D,IAAA,IACE,QAAS,CAAA,MAAA,KAAW,UAAW,CAAA,MAAA,IAC9B,QAAS,CAAA,MAAA,IACR,IAAK,CAAA,SAAA,CAAU,QAAQ,CAAA,KAAM,IAAK,CAAA,SAAA,CAAU,UAAU,CACxD,EAAA;AACA,MAAA,UAAA,CAAW,OAAO,MAAS,GAAA,eAAA,CAAA;AAC3B,MAAO,OAAA,QAAA,CAAA;AAAA,KACE,MAAA,IAAA,SAAA,KAAc,WAAe,IAAA,SAAA,KAAc,IAAI,WAAgB,CAAA,CAAA,CAAA,EAAA;AACxE,MAAA,UAAA,CAAW,YAAY,IAAK,CAAA;AAAA,QAC1B,IAAM,EAAA,SAAA;AAAA,QACN,MAAQ,EAAA,WAAA;AAAA,QACR,QAAQ,MAAM;AACZ,UAAA,YAAA,CAAa,eAAiB,EAAA,GAAA,EAAK,MAAQ,EAAA,QAAA,EAAU,UAAU,CAAA,CAAA;AAC/D,UAAI,IAAA,CAAC,gBAAgB,SAAW,EAAA;AAC9B,YAAA,eAAA,CAAgB,SAAY,GAAA,IAAA,CAAA;AAC5B,YAAI,GAAA,CAAA,IAAA,CAAK,gBAAgB,cAAc,CAAA,CAAA;AAAA,WACzC;AAAA,SACF;AAAA,OACD,CAAA,CAAA;AAAA,KACH;AAAA,GACF;AAEA,EAAA,OAAA;AACF,CAAA,CAAA;AAEA,MAAM,eAAe,CACnB,eAAA,EACA,GACA,EAAA,MAAA,EACA,UACA,UACG,KAAA;AACH,EAAA,QAAA,CAAS,IAAK,CAAA,EAAA,GAAK,UAAW,CAAA,IAAA,CAAK,EAAK,GAAA,KAAA,CAAA,CAAA;AAExC,EAAM,MAAA,gBAAA,GAAmB,MAAO,CAAA,MAAA,CAAO,UAAU,CAAA,CAAA;AACjD,EAAiB,gBAAA,CAAA,IAAA,GAAOC,eACnB,CAAAf,gBAAA,CAAA,EAAA,EAAA,UAAA,CAAW,IADQ,CAAA,EAAA;AAAA,IAEtB,UAAY,EAAA,KAAA,CAAA;AAAA,IACZ,OAAS,EAAA,KAAA,CAAA;AAAA,IACT,WAAa,EAAA,KAAA,CAAA;AAAA,IACb,KAAO,EAAA,KAAA,CAAA;AAAA,GACT,CAAA,CAAA;AAEA,EAAgB,eAAA,CAAA,eAAA,CAAgB,MAAM,CAAI,GAAA;AAAA,IACxC,IAAM,EAAA,QAAA;AAAA,IACN,EAAI,EAAA,gBAAA;AAAA,GACN,CAAA;AAEA,EAAgB,eAAA,CAAA,cAAA,CAAe,KAAM,CAAA,GAAG,CAAI,GAAA;AAAA,IAC1C,IAAM,EAAA,QAAA;AAAA,IACN,IAAA,EAAM,EAAE,MAAA,EAAQ,QAAS,EAAA;AAAA,IACzB,EAAA,EAAI,EAAE,MAAA,EAAQ,gBAAiB,EAAA;AAAA,GACjC,CAAA;AACF,CAAA,CAAA;AAEa,MAAA,eAAA,GAAkB,CAC7B,MAAA,EACA,aACG,KAAA;AACH,EAAA,IAAI,kBAAkBU,cAAY,EAAA;AAChC,IAAA,MAAM,CAAC,MAAA,GAAS,aAAe,EAAA,IAAI,CAAI,GAAAX,gCAAA;AAAA,MACrC,MAAO,CAAA,QAAA;AAAA,KACT,CAAA;AACA,IAAQ,OAAA,MAAA,CAAO,QAAW,GAAA,CAAA,EAAG,MAAU,CAAA,CAAA,EAAA,IAAA,CAAA,CAAA,CAAA;AAAA,GACzC,MAAA,IAAW,kBAAkBQ,eAAa,EAAA;AACxC,IAAO,OAAA,MAAA,CAAO,KAAK,IAAK,CAAA,QAAA,GAAW,KAAK,MAAO,CAAA,MAAA,CAAO,KAAK,SAAS,CAAA,CAAA;AAAA,GAC/D,MAAA;AACL,IAAA,OAAO,MAAO,CAAA,QAAA,CAAA;AAAA,GAChB;AACF,CAAA,CAAA;AAEA,MAAM,YAAe,GAAA,CAAC,OAAmB,EAAA,IAAA,EAAc,EAAe,KAAA;AACpE,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,OAAA,CAAQ,QAAQ,CAAK,EAAA,EAAA;AACvC,IAAI,IAAA,OAAA,CAAQ,CAAC,CAAA,KAAM,IAAM,EAAA;AACvB,MAAA,OAAA,CAAQ,CAAC,CAAI,GAAA,EAAA,CAAA;AAAA,KACf;AAAA,GACF;AACF,CAAA;;AC1gBa,MAAA,cAAA,GAAiB,OAC5B,GACA,EAAA,OAAA,EACA,mBACA,UACA,EAAA,WAAA,EACA,eACA,OACG,KAAA;AACH,EAAA,MAAM,cAAkC,EAAC,CAAA;AACzC,EAAA,IAAI,OAAS,EAAA;AACX,IAAA,KAAA,MAAW,EAAE,UAAA,EAAY,IAAM,EAAA,MAAA,MAAY,OAAS,EAAA;AAClD,MAAY,WAAA,CAAA,IAAA;AAAA,QACV,oBAAqB,CAAA,aAAA,EAAe,UAAY,EAAA,IAAA,EAAM,MAAM,CAAA;AAAA,OAC9D,CAAA;AAAA,KACF;AAAA,GACF;AAEA,EAAA,MAAM,mBAAsC,EAAC,CAAA;AAC7C,EAAM,MAAA,eAAA,uBAAsB,GAAsB,EAAA,CAAA;AAElD,EAAW,KAAA,MAAA,MAAA,IAAU,YAAY,OAAS,EAAA;AACxC,IAAA,MAAM,QAAW,GAAAD,0BAAA;AAAA,MACf,iBAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA;AAAA;AAAA,QAGE,YAAY,MAAO,CAAA,UAAA;AAAA,QACnB,SAAW,EAAA,KAAA;AAAA,QACX,MAAM,MAAO,CAAA,IAAA;AAAA,QACb,YAAY,MAAO,CAAA,UAAA;AAAA,QACnB,MAAM,MAAO,CAAA,IAAA;AAAA,QACb,WAAW,MAAO,CAAA,SAAA;AAAA,QAClB,SAAS,MAAO,CAAA,OAAA;AAAA,QAChB,YAAY,MAAO,CAAA,UAAA;AAAA,QACnB,SAAS,MAAO,CAAA,OAAA;AAAA,QAChB,UAAU,MAAO,CAAA,QAAA;AAAA,QACjB,MAAQ,EAAA,CAAA,CAAA;AAAA,OACV;AAAA,KACF,CAAA;AAEA,IAAA,IAAI,OAAO,KAAO,EAAA;AAChB,MAAA,QAAA,CAAS,KAAK,KAAQ,GAAA;AAAA,QACpB,GAAA,EAAK,IAAIU,UAAO,CAAA,CAAC,CAAC,MAAO,CAAA,KAAK,CAAC,CAAmC,CAAA;AAAA,OACpE,CAAA;AAAA,KACF;AAEA,IAAA,MAAM,QAAW,GAAA,oBAAA;AAAA,MACf,aAAA;AAAA,MACA,MAAO,CAAA,UAAA;AAAA,MACP,MAAO,CAAA,IAAA;AAAA,MACP,QAAA;AAAA,KACF,CAAA;AAEA,IAAA,MAAM,QAAQ,WAAY,CAAA,MAAA;AAAA,MAAO,CAAC,UAChC,KAAAL,sBAAA,CAAY,QAAS,CAAA,OAAA,EAAS,WAAW,OAAO,CAAA;AAAA,KAClD,CAAA;AAEA,IAAA,IAAA,CAAK,MAAO,CAAA,OAAA,IAAW,MAAO,CAAA,KAAA,KAAU,MAAM,MAAQ,EAAA;AACpD,MAAA,KAAA,MAAW,cAAc,KAAO,EAAA;AAC9B,QAAA,eAAA,CAAgB,IAAI,UAAU,CAAA,CAAA;AAAA,OAChC;AAEA,MAAA,MAAM,UAAwC,EAAC,CAAA;AAC/C,MAAY,WAAA,CAAA,OAAA,EAAS,MAAQ,EAAA,KAAA,EAAO,SAAS,CAAA,CAAA;AAC7C,MAAY,WAAA,CAAA,OAAA,EAAS,MAAQ,EAAA,KAAA,EAAO,OAAO,CAAA,CAAA;AAE3C,MAAA,MAAM,SAAS,CAAkB,eAAA,EAAA,eAAA;AAAA,QAC/B,QAAA;AAAA,QACA,aAAA;AAAA,OACF,CAAA,WAAA,CAAA,CAAA;AAEA,MAAA,gBAAA,CAAiB,IAAK,CAAA;AAAA,QACpB,OAAA;AAAA,QACA,MAAA;AAAA,QACA,OAAO,KAAO,EAAA;AACZ,UAAA,MAAM,UAAa,GAAA,KAAA,KAAU,KAAY,CAAA,GAAA,KAAA,CAAA,GAAY,MAAM,KAAK,CAAA,CAAA;AAChE,UAAA,IAAI,CAAC,UAAY,EAAA;AACf,YAAI,GAAA,CAAA,IAAA,CAAK,OAAQ,CAAA,QAAQ,CAAC,CAAA,CAAA;AAAA,WACrB,MAAA;AACL,YAAA,eAAA,CAAgB,OAAO,UAAU,CAAA,CAAA;AAAA,WACnC;AAAA,SACF;AAAA,OACD,CAAA,CAAA;AAAA,KACH,MAAA,IAAW,MAAM,MAAQ,EAAA;AACvB,MAAA,IAAI,IAAI,WAAY,CAAA,SAAA;AAAA,QAClB,CAAC,eACC,UAAW,CAAA,IAAA,KAAS,SAAS,IAC7B,IAAA,UAAA,CAAW,eAAe,QAAS,CAAA,UAAA;AAAA,OACvC,CAAA;AACA,MAAA,IAAI,MAAM,CAAI,CAAA,EAAA;AACZ,QAAI,CAAA,GAAA,CAAA,CAAA;AACJ,QAAM,MAAA,KAAA,GAAQ,MAAM,CAAC,CAAA,CAAA;AACrB,QAAA,GAAA,CAAI,IAAK,CAAA;AAAA,UACP,IAAM,EAAA,YAAA;AAAA,UACN,IAAM,EAAA,QAAA;AAAA,UACN,YAAY,QAAS,CAAA,UAAA;AAAA,UACrB,MAAM,QAAS,CAAA,IAAA;AAAA,UACf,UAAU,KAAM,CAAA,UAAA;AAAA,UAChB,IAAI,KAAM,CAAA,IAAA;AAAA,SACX,CAAA,CAAA;AAAA,OACH;AAEA,MAAY,WAAA,CAAA,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA;AAAA,KAClB,MAAA;AACL,MAAI,GAAA,CAAA,IAAA,CAAK,OAAQ,CAAA,QAAQ,CAAC,CAAA,CAAA;AAAA,KAC5B;AAAA,GACF;AAEA,EAAA,KAAA,MAAW,cAAc,WAAa,EAAA;AACpC,IAAA,IAAI,CAAC,eAAA,CAAgB,GAAI,CAAA,UAAU,CAAG,EAAA;AACpC,MAAI,GAAA,CAAA,IAAA,CAAK,SAAU,CAAA,UAAU,CAAC,CAAA,CAAA;AAAA,KAChC;AAAA,GACF;AAEA,EAAA,IAAI,iBAAiB,MAAQ,EAAA;AAC3B,IAAM,MAAA,qBAAA,CAAsB,kBAAkB,OAAO,CAAA,CAAA;AAErD,IAAA,IAAI,gBAAgB,IAAM,EAAA;AACxB,MAAW,KAAA,MAAA,UAAA,IAAc,eAAgB,CAAA,IAAA,EAAQ,EAAA;AAC/C,QAAI,GAAA,CAAA,IAAA,CAAK,SAAU,CAAA,UAAU,CAAC,CAAA,CAAA;AAAA,OAChC;AAAA,KACF;AAAA,GACF;AACF,CAAA,CAAA;AAEA,MAAM,oBAAuB,GAAA,CAC3B,aACA,EAAA,UAAA,EACA,MACA,MACqB,KAAA;AA9KvB,EAAA,IAAA,EAAA,CAAA;AA+KE,EAAA,IAAI,SAAY,GAAA,CAAA,CAAA;AAChB,EAAA,MAAM,UAAa,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,IAAK,CAAA,UAAA,KAAZ,IAA0B,GAAA,EAAA,GAAA,KAAA,CAAA;AAC7C,EAAA,IAAI,KAAQ,GAAA,MAAA,CAAA;AACZ,EAAA,OAAO,iBAAiBJ,eAAa,EAAA;AACnC,IAAA,KAAA,GAAQ,MAAM,IAAK,CAAA,IAAA,CAAA;AACnB,IAAA,SAAA,EAAA,CAAA;AAAA,GACF;AACA,EAAM,MAAA,QAAA,GAAW,eAAgB,CAAA,KAAA,EAAO,aAAa,CAAA,CAAA;AACrD,EAAA,MAAM,CAAC,UAAa,GAAA,YAAA,EAAc,IAAI,CAAA,GAAIR,iCAA0B,QAAQ,CAAA,CAAA;AAE5E,EAAO,OAAA;AAAA,IACL,UAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAS,EAAA;AAAA,MACP,IAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA,EAAU,MAAM,IAAK,CAAA,QAAA;AAAA,MACrB,gBAAA,EAAkB,MAAM,IAAK,CAAA,gBAAA;AAAA,MAC7B,YAAA,EAAc,MAAM,IAAK,CAAA,YAAA;AAAA,MACzB,iBAAA,EAAmB,MAAM,IAAK,CAAA,iBAAA;AAAA,MAC9B,OAAA,EAAS,OAAO,IAAK,CAAA,OAAA;AAAA,MACrB,UAAA,EAAY,MAAO,CAAA,IAAA,CAAK,OAAY,KAAA,KAAA,CAAA;AAAA,MACpC,QAAA,EAAU,MAAO,CAAA,IAAA,CAAK,KAAU,KAAA,KAAA,CAAA;AAAA,KAClC;AAAA,GACF,CAAA;AACF,CAAA,CAAA;AAEA,MAAM,WAAc,GAAA,CAClB,OACA,EAAA,MAAA,EACA,OACA,GACG,KAAA;AACH,EAAM,MAAA,IAAA,GAAO,OAAO,GAAG,CAAA,CAAA;AACvB,EAAA,IAAI,IAAM,EAAA;AACR,IAAA,OAAA,CAAQ,IAAK,CAAA;AAAA,MACX,IAAA;AAAA,MACA,MAAQ,EAAA,KAAA,CAAM,GAAI,CAAA,CAAC,UAAe,KAAA;AAChC,QAAA,MAAM,KAAQ,GAAA,UAAA,CAAW,MAAO,CAAA,IAAA,CAAK,GAAG,CAAA,CAAA;AACxC,QAAA,IAAI,SAAU,KAA+B,EAAA;AAC3C,UAAA,OAAQ,KAA8B,CAAA,GAAA,CAAA;AAAA,SACxC;AACA,QAAO,OAAA,KAAA,CAAA;AAAA,OACR,CAAA;AAAA,KACF,CAAA,CAAA;AAAA,GACH;AACF,CAAA,CAAA;AAEA,MAAM,OAAA,GAAU,CAAC,QAAkD,MAAA;AAAA,EACjE,IAAM,EAAA,QAAA;AAAA,EACN,MAAQ,EAAA,MAAA;AAAA,EACR,QAAQ,QAAS,CAAA,UAAA;AAAA,EACjB,MAAM,QAAS,CAAA,IAAA;AAAA,EACf,UAAU,QAAS,CAAA,MAAA;AACrB,CAAA,CAAA,CAAA;AAEA,MAAM,SAAA,GAAY,CAAC,UAAoD,MAAA;AAAA,EACrE,IAAM,EAAA,QAAA;AAAA,EACN,MAAQ,EAAA,QAAA;AAAA,EACR,QAAQ,UAAW,CAAA,UAAA;AAAA,EACnB,MAAM,UAAW,CAAA,IAAA;AAAA,EACjB,UAAU,UAAW,CAAA,MAAA;AACvB,CAAA,CAAA;;;;;;;;;;;;;;;;;;ACvOO,MAAM,eAAe,OAC1B,GAAA,EACA,KACA,EAAA,WAAA,EACA,eACA,SACkB,KAAA;AAfpB,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAgBE,EAAA,MAAM,cAA0B,EAAC,CAAA;AACjC,EAAA,MAAM,YAAgC,EAAC,CAAA;AAEvC,EAAA,KAAA,MAAW,GAAG,QAAQ,CAAA,IAAK,KAAO,EAAA;AAChC,IAAA,MAAM,EAAE,MAAA,GAAS,aAAe,EAAA,IAAA,EAAS,GAAA,QAAA,CAAA;AACzC,IAAM,MAAA,MAAA,GAAS,YAAY,KAAM,CAAA,IAAA;AAAA,MAC/B,CAAC,CAAM,KAAA,CAAA,CAAE,UAAe,KAAA,MAAA,IAAU,EAAE,IAAS,KAAA,IAAA;AAAA,KAC/C,CAAA;AACA,IAAA,IAAI,CAAC,MAAQ,EAAA;AACX,MAAA,WAAA,CAAY,KAAK,QAAQ,CAAA,CAAA;AAAA,KAC3B;AAAA,GACF;AAEA,EAAW,KAAA,MAAA,MAAA,IAAU,YAAY,KAAO,EAAA;AACtC,IAAA,MAAM,WAAW,KAAM,CAAA,GAAA,CAAI,GAAG,MAAO,CAAA,UAAA,CAAA,CAAA,EAAc,OAAO,IAAM,CAAA,CAAA,CAAA,CAAA;AAChE,IAAA,IAAI,QAAU,EAAA;AACZ,MAAW,UAAA,CAAA,GAAA,EAAK,QAAQ,QAAQ,CAAA,CAAA;AAChC,MAAA,SAAA;AAAA,KACF;AAEA,IAAM,MAAA,CAAA,GAAI,YAAY,SAAU,CAAA,CAAC,MAAM,CAAE,CAAA,IAAA,KAAS,OAAO,IAAI,CAAA,CAAA;AAC7D,IAAA,IAAI,MAAM,CAAI,CAAA,EAAA;AACZ,MAAMkB,MAAAA,SAAAA,GAAW,YAAY,CAAC,CAAA,CAAA;AAC9B,MAAY,WAAA,CAAA,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA;AACvB,MAAA,MAAM,aAAa,MAAO,CAAA,UAAA,CAAA;AAC1B,MAAA,MAAM,QAAW,GAAA,CAAA,EAAA,GAAAA,SAAS,CAAA,MAAA,KAAT,IAAmB,GAAA,EAAA,GAAA,aAAA,CAAA;AAEpC,MAAwB,uBAAA,CAAA,WAAA,EAAa,YAAY,QAAQ,CAAA,CAAA;AAEzD,MAAA,GAAA,CAAI,IAAK,CAAA;AAAA,QACP,IAAM,EAAA,YAAA;AAAA,QACN,IAAM,EAAA,MAAA;AAAA,QACN,UAAA;AAAA,QACA,MAAM,MAAO,CAAA,IAAA;AAAA,QACb,QAAA;AAAA,QACA,IAAI,MAAO,CAAA,IAAA;AAAA,OACZ,CAAA,CAAA;AAED,MAAW,UAAA,CAAA,GAAA,EAAK,QAAQA,SAAQ,CAAA,CAAA;AAEhC,MAAA,SAAA;AAAA,KACF;AAEA,IAAA,SAAA,CAAU,KAAK,MAAM,CAAA,CAAA;AAAA,GACvB;AAEA,EAAA,KAAA,MAAW,YAAY,WAAa,EAAA;AAClC,IAAA,IAAI,UAAU,MAAQ,EAAA;AACpB,MAAA,MAAM,QAAQ,MAAM,oBAAA;AAAA,QAClB,MAAA;AAAA,QACA,QAAS,CAAA,IAAA;AAAA,QACT,SAAU,CAAA,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAAA,QAC3B,SAAA;AAAA,OACF,CAAA;AACA,MAAA,IAAI,KAAO,EAAA;AACT,QAAM,MAAA,MAAA,GAAS,SAAU,CAAA,KAAA,GAAQ,CAAC,CAAA,CAAA;AAClC,QAAU,SAAA,CAAA,MAAA,CAAO,KAAQ,GAAA,CAAA,EAAG,CAAC,CAAA,CAAA;AAE7B,QAAA,MAAM,aAAa,MAAO,CAAA,UAAA,CAAA;AAC1B,QAAA,MAAM,OAAO,MAAO,CAAA,IAAA,CAAA;AACpB,QAAM,MAAA,QAAA,GAAA,CAAW,EAAS,GAAA,QAAA,CAAA,MAAA,KAAT,IAAmB,GAAA,EAAA,GAAA,aAAA,CAAA;AACpC,QAAA,MAAM,KAAK,QAAS,CAAA,IAAA,CAAA;AAEpB,QAAA,IAAI,eAAe,QAAU,EAAA;AAC3B,UAAwB,uBAAA,CAAA,WAAA,EAAa,YAAY,QAAQ,CAAA,CAAA;AAAA,SAC3D;AAEA,QAAW,KAAA,MAAA,KAAA,IAAS,YAAY,MAAQ,EAAA;AACtC,UAAW,KAAA,MAAA,MAAA,IAAU,MAAM,OAAS,EAAA;AAClC,YAAI,IAAA,MAAA,CAAO,SAAS,IAAM,EAAA;AACxB,cAAA,MAAA,CAAO,IAAO,GAAA,EAAA,CAAA;AAAA,aAChB;AAAA,WACF;AAAA,SACF;AAEA,QAAA,GAAA,CAAI,IAAK,CAAA;AAAA,UACP,IAAM,EAAA,YAAA;AAAA,UACN,IAAM,EAAA,MAAA;AAAA,UACN,UAAA;AAAA,UACA,IAAA;AAAA,UACA,QAAA;AAAA,UACA,EAAA;AAAA,SACD,CAAA,CAAA;AAED,QAAW,UAAA,CAAA,GAAA,EAAK,QAAQ,QAAQ,CAAA,CAAA;AAEhC,QAAA,SAAA;AAAA,OACF;AAAA,KACF;AAEA,IAAA,GAAA,CAAI,IAAK,CAAAjB,gBAAA,CAAA;AAAA,MACP,IAAM,EAAA,MAAA;AAAA,MACN,MAAQ,EAAA,QAAA;AAAA,KAAA,EACL,QACJ,CAAA,CAAA,CAAA;AAAA,GACH;AAEA,EAAA,KAAA,MAAW,UAAU,SAAW,EAAA;AAC9B,IAAA,GAAA,CAAI,IAAK,CAAA;AAAA,MACP,IAAM,EAAA,MAAA;AAAA,MACN,MAAQ,EAAA,MAAA;AAAA,MACR,QAAQ,MAAO,CAAA,UAAA;AAAA,MACf,MAAM,MAAO,CAAA,IAAA;AAAA,MACb,QAAQ,MAAO,CAAA,MAAA;AAAA,KAChB,CAAA,CAAA;AAAA,GACH;AACF,CAAA,CAAA;AAEA,MAAM,UAAa,GAAA,CACjB,GACA,EAAA,MAAA,EACA,QACG,KAAA;AACH,EAAM,MAAA,EAAE,MAAQ,EAAA,QAAA,EAAa,GAAA,MAAA,CAAA;AAC7B,EAAA,MAAM,EAAE,MAAA,EAAQ,UAAY,EAAA,MAAA,EAAQ,MAAS,GAAA,QAAA,CAAA;AAE7C,EAAI,IAAA,QAAA,CAAS,MAAS,GAAA,UAAA,CAAW,MAAQ,EAAA;AACvC,IAAI,IAAA,CAAC,QAAS,CAAA,IAAA,CAAK,CAAC,KAAA,EAAO,MAAM,KAAU,KAAA,UAAA,CAAW,CAAC,CAAC,CAAG,EAAA;AACzD,MAAA,GAAA,CAAI,IAAK,CAAA;AAAA,QACP,IAAM,EAAA,YAAA;AAAA,QACN,MAAQ,EAAA,KAAA;AAAA,QACR,MAAA;AAAA,QACA,IAAA;AAAA,QACA,QAAQ,UAAW,CAAA,KAAA,CAAM,EAAE,UAAW,CAAA,MAAA,GAAS,SAAS,MAAO,CAAA,CAAA;AAAA,OAChE,CAAA,CAAA;AACD,MAAA,OAAA;AAAA,KACF;AAAA,GACS,MAAA,IAAA,QAAA,CAAS,MAAS,GAAA,UAAA,CAAW,MAAQ,EAAA;AAC9C,IAAI,IAAA,CAAC,UAAW,CAAA,IAAA,CAAK,CAAC,KAAA,EAAO,MAAM,KAAU,KAAA,QAAA,CAAS,CAAC,CAAC,CAAG,EAAA;AACzD,MAAA,GAAA,CAAI,IAAK,CAAA;AAAA,QACP,IAAM,EAAA,YAAA;AAAA,QACN,MAAQ,EAAA,MAAA;AAAA,QACR,MAAA;AAAA,QACA,IAAA;AAAA,QACA,QAAQ,QAAS,CAAA,KAAA,CAAM,EAAE,QAAS,CAAA,MAAA,GAAS,WAAW,MAAO,CAAA,CAAA;AAAA,OAC9D,CAAA,CAAA;AACD,MAAA,OAAA;AAAA,KACF;AAAA,GACF,MAAA,IAAW,CAAC,QAAA,CAAS,IAAK,CAAA,CAAC,KAAO,EAAA,CAAA,KAAM,KAAU,KAAA,UAAA,CAAW,CAAC,CAAC,CAAG,EAAA;AAChE,IAAA,OAAA;AAAA,GACF;AAEA,EAAA,GAAA,CAAI,IAAK,CAAA;AAAA,IACP,IAAM,EAAA,kBAAA;AAAA,IACN,MAAA;AAAA,IACA,IAAA;AAAA,IACA,UAAY,EAAA,QAAA;AAAA,IACZ,QAAU,EAAA,UAAA;AAAA,GACX,CAAA,CAAA;AACH,CAAA,CAAA;AAEA,MAAM,uBAA0B,GAAA,CAC9B,WACA,EAAA,IAAA,EACA,EACG,KAAA;AACH,EAAW,KAAA,MAAA,KAAA,IAAS,YAAY,MAAQ,EAAA;AACtC,IAAW,KAAA,MAAA,MAAA,IAAU,MAAM,OAAS,EAAA;AAClC,MAAI,IAAA,MAAA,CAAO,eAAe,IAAM,EAAA;AAC9B,QAAA,MAAA,CAAO,UAAa,GAAA,EAAA,CAAA;AAAA,OACtB;AAAA,KACF;AAAA,GACF;AACF,CAAA;;;;;;;;;;;;;;;;;;;;;AC7Ka,MAAA,iBAAA,GAAoB,CAC/B,MAAA,EACA,eACG,KAAA;AATL,EAAA,IAAA,EAAA,CAAA;AAUE,EAAM,MAAA,EAAE,WAAc,GAAA,eAAA,CAAA;AAEtB,EAAA,MAAM,oBAAqD,EAAC,CAAA;AAC5D,EAAW,KAAA,MAAA,GAAA,IAAO,UAAU,KAAO,EAAA;AACjC,IAAM,MAAA,MAAA,GAAS,SAAU,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAClC,IAAI,IAAA,MAAA,CAAO,KAAK,UAAY,EAAA;AAC1B,MAAkB,iBAAA,CAAA,IAAA,CAAK,EAAE,GAAK,EAAA,IAAA,EAAA,CAAM,YAAO,IAAK,CAAA,IAAA,KAAZ,IAAoB,GAAA,EAAA,GAAA,GAAA,EAAK,CAAA,CAAA;AAAA,KAC/D;AAAA,GACF;AAEA,EAAiB,gBAAA,CAAA,MAAA,EAAQ,mBAAmB,eAAe,CAAA,CAAA;AAC3D,EAAA,gBAAA,CAAiB,eAAe,CAAA,CAAA;AAClC,CAAA,CAAA;AAEA,MAAM,gBAAA,GAAmB,CACvB,MAAA,EACA,iBACA,EAAA;AAAA,EACE,SAAA;AAAA,EACA,WAAA,EAAa,EAAE,UAAA,EAAY,YAAa,EAAA;AAAA,EACxC,cAAgB,EAAA,EAAE,KAAO,EAAA,GAAA,EAAK,IAAK,EAAA;AAAA,EACnC,eAAA;AACF,CACG,KAAA;AAjCL,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAkCE,EAAM,MAAA,eAAA,GAAkB,SAAU,CAAA,QAAA,CAAS,SAAU,CAAA,UAAA,CAAA;AACrD,EAAA,MAAM,UAAa,GAAA;AAAA,IACjB,uBAAO,GAAI,CAAA;AAAA,MACT,GAAG,iBAAA;AAAA,MACH,IAAK,EAAO,GAAA,MAAA,CAAA,SAAA,GACR,mDAAiB,OAAQ,CAAA,GAAA,CAAI,CAAC,GAAS,MAAA;AAAA,QACrC,GAAA;AAAA,QACA,IAAA,EAAMG,uBAAY,GAAG,CAAA;AAAA,OAEvB,CAAA,CAAA,GAAA,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAiB,OAAQ,CAAA,GAAA,CAAI,CAAC,GAAA,MAAS,EAAE,GAAA,EAAK,IAAM,EAAA,GAAA,EALnD,CAAA,CAAA,KAAA,IAAA,GAAA,EAAA,GAK+D,EAAC;AAAA,KACtE,CAAA;AAAA,GACH,CAAA;AAEA,EAAA,IACE,gBACA,UAAW,CAAA,MAAA,KAAW,aAAa,OAAQ,CAAA,MAAA,IAC3C,CAAC,UAAW,CAAA,IAAA;AAAA,IACV,CAAC,EAAE,IAAA,EAAW,KAAA,CAAC,YAAa,CAAA,OAAA,CAAQ,IAAK,CAAA,CAAC,MAAW,KAAA,IAAA,KAAS,MAAM,CAAA;AAAA,GAEtE,EAAA;AACA,IAAI,IAAA,UAAA,CAAW,WAAW,CAAG,EAAA;AAC3B,MAAA,MAAM,EAAE,GAAA,EAAQ,GAAA,UAAA,CAAW,CAAC,CAAA,CAAA;AAC5B,MAAA,MAAM,UAAU,KAAM,CAAA,GAAG,KAAKe,kBAAQ,CAAA,KAAA,CAAM,GAAG,CAAC,CAAA,CAAA;AAChD,MAAA,IAAI,OAAS,EAAA;AACX,QAAA,KAAA,MAAW,UAAU,OAAS,EAAA;AAC5B,UAAA,IAAI,OAAO,IAAS,KAAA,QAAA;AAAU,YAAA,SAAA;AAE9B,UAAI,IAAA,MAAA,CAAO,KAAK,MAAQ,EAAA;AACtB,YAAO,MAAA,CAAA,IAAA,CAAK,MAAO,CAAA,IAAA,CAAK,UAAa,GAAA,KAAA,CAAA,CAAA;AAAA,WACvC;AAEA,UAAI,IAAA,MAAA,CAAO,GAAG,MAAQ,EAAA;AACpB,YAAA,MAAM,MAAS,GAAA,MAAA,CAAO,MAAO,CAAA,MAAA,CAAO,GAAG,MAAM,CAAA,CAAA;AAC7C,YAAA,MAAA,CAAO,OAAOH,eAAK,CAAAf,gBAAA,CAAA,EAAA,EAAA,MAAA,CAAO,IAAZ,CAAA,EAAA,EAAkB,YAAY,KAAU,CAAA,EAAA,CAAA,CAAA;AACtD,YAAA,MAAA,CAAO,GAAG,MAAS,GAAA,MAAA,CAAA;AAAA,WACrB;AAAA,SACF;AAAA,OACF;AAAA,KACF;AACA,IAAA,OAAA;AAAA,GACF;AAEA,EAAM,MAAA,MAAA,GAAS,6CAAc,OAAQ,CAAA,MAAA;AAAA,IACnC,CAAC,GAAA,KAAQ,CAAC,uBAAA,CAAwB,OAAO,GAAG,CAAA;AAAA,GAAA,CAAA;AAE9C,EAAA,IAAI,iCAAQ,MAAQ,EAAA;AAClB,IAAA,IAAI,OAAO,MAAW,KAAA,CAAA,IAAK,gBAAgB,MAAO,CAAA,CAAC,CAAC,CAAG,EAAA;AACrD,MAAA,MAAM,MAAS,GAAA,eAAA,CAAgB,MAAO,CAAA,CAAC,CAAC,CAAA,CAAA;AACxC,MAAA,MAAA,CAAO,IAAK,CAAA,IAAA,CAAK,UACf,GAAA,CAAA,EAAA,GAAA,YAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,YAAA,CAAc,SAAd,IAAuB,GAAA,EAAA,GAAA,IAAA,CAAA;AAAA,KACpB,MAAA;AACL,MAAA,IAAA,CAAK,aAAa,EAAE,OAAA,EAAS,MAAQ,EAAA,IAAA,EAAM,6CAAc,IAAK,EAAA,CAAA;AAAA,KAChE;AAAA,GACF;AAEA,EAAA,MAAM,QAAQ,UAAW,CAAA,MAAA;AAAA,IACvB,CAAC,EAAE,GAAA,OAAU,CAAC,uBAAA,CAAwB,OAAO,GAAG,CAAA;AAAA,GAClD,CAAA;AACA,EAAA,IAAI,MAAM,MAAQ,EAAA;AAChB,IAAI,IAAA,KAAA,CAAM,WAAW,CAAK,IAAA,eAAA,CAAgB,MAAM,CAAC,CAAA,CAAE,IAAI,CAAG,EAAA;AACxD,MAAA,MAAM,MAAS,GAAA,eAAA,CAAgB,KAAM,CAAA,CAAC,EAAE,IAAI,CAAA,CAAA;AAC5C,MAAA,MAAA,CAAO,EAAG,CAAA,IAAA,CAAK,UACb,GAAA,CAAA,EAAA,GAAA,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAiB,SAAjB,IAA0B,GAAA,EAAA,GAAA,IAAA,CAAA;AAAA,KACvB,MAAA;AACL,MAAA,GAAA,CAAI,UAAa,GAAA;AAAA,QACf,SAAS,KAAM,CAAA,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,GAAG,CAAA;AAAA,QAC/B,MAAM,eAAiB,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAA,IAAA;AAAA,OACzB,CAAA;AAAA,KACF;AAAA,GACF;AACF,CAAA,CAAA;AAEA,MAAM,mBAAmB,CAAC;AAAA,EACxB,SAAA;AAAA,EACA,WAAA,EAAa,EAAE,UAAA,EAAY,YAAa,EAAA;AAAA,EACxC,MAAA;AAAA,EACA,UAAA;AACF,CAAuB,KAAA;AA/GvB,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAgHE,EAAM,MAAA,eAAA,GAAkB,SAAU,CAAA,QAAA,CAAS,SAAU,CAAA,UAAA,CAAA;AACrD,EAAA,IACE,YACA,IAAA,eAAA,IAAA,CACA,YAAc,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,YAAA,CAAA,IAAA,OAAS,mDAAiB,IACxC,CAAA,EAAA;AACA,IAAA,UAAA,CAAW,IAAK,CAAA;AAAA,MACd,IAAM,EAAA,iBAAA;AAAA,MACN,IAAM,EAAA,YAAA;AAAA,MACN,WAAa,EAAA,MAAA;AAAA,MACb,WAAW,SAAU,CAAA,KAAA;AAAA,MACrB,IAAM,EAAA,CAAA,EAAA,GAAA,YAAA,CAAa,IAAb,KAAA,IAAA,GAAA,EAAA,GAAqB,GAAG,SAAU,CAAA,KAAA,CAAA,KAAA,CAAA;AAAA,MACxC,EAAI,EAAA,CAAA,EAAA,GAAA,eAAA,CAAgB,IAAhB,KAAA,IAAA,GAAA,EAAA,GAAwB,CAAG,EAAA,SAAA,CAAA,KAAA,CAAA;AAAA,KAChC,CAAA,CAAA;AAAA,GACH;AACF,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrFO,MAAM,cAAiB,GAAA,CAC5B,MACA,EAAA,eAAA,EACA,KACA,kBACG,KAAA;AACH,EAAM,MAAA,WAAA,GAAc,kBAAmB,CAAA,MAAA,EAAQ,eAAe,CAAA,CAAA;AAC9D,EAAA,MAAM,qBAAwB,GAAA,4BAAA;AAAA,IAC5B,MAAA;AAAA,IACA,WAAA;AAAA,GACF,CAAA;AAGA,EAAM,MAAA,eAAA,uBAAsB,GAAqB,EAAA,CAAA;AAGjD,EAAM,MAAA,eAAA,uBAAsB,GAA8B,EAAA,CAAA;AAG1D,EAAA,IAAI,IAAO,GAAA,CAAA,CAAA;AAEX,EAAM,MAAA;AAAA,IACJ,cAAA,EAAgB,EAAE,KAAM,EAAA;AAAA,GACtB,GAAA,eAAA,CAAA;AACJ,EAAW,KAAA,MAAA,OAAA,IAAW,eAAgB,CAAA,WAAA,CAAY,OAAS,EAAA;AACzD,IAAM,MAAA,uBAAA,GAA0B,QAAQ,OAAQ,CAAA,IAAA;AAAA,MAC9C,CAAC,MACC,KAAA,QAAA,IAAY,UAAU,uBAAwB,CAAA,KAAA,EAAO,OAAO,MAAM,CAAA;AAAA,KACtE,CAAA;AACA,IAAI,IAAA,uBAAA;AAAyB,MAAA,SAAA;AAE7B,IAAA,cAAA,CAAe,OAAO,CAAA,CAAA;AAEtB,IAAA,MAAM,EAAE,KAAA,EAAO,MAAQ,EAAA,cAAA,EAAmB,GAAA,iBAAA;AAAA,MACxC,OAAA;AAAA,MACA,qBAAA;AAAA,MACA,WAAA;AAAA,MACA,eAAA;AAAA,MACA,gBAAgB,SAAU,CAAA,KAAA;AAAA,MAC1B,MAAA;AAAA,KACF,CAAA;AAEA,IAAM,MAAA,EAAE,OAAS,EAAA,SAAA,EAAc,GAAA,OAAA,CAAA;AAE/B,IAAA,IAAI,CAAC,cAAgB,EAAA;AACnB,MAAA,iBAAA;AAAA,QACE,eAAA;AAAA,QACA,OAAA;AAAA,QACA,SAAA;AAAA,QACA,MAAM,CAAC,CAAA;AAAA,QACP,OAAO,CAAC,CAAA;AAAA,OACV,CAAA;AACA,MAAA,SAAA;AAAA,KACF;AAEA,IAAA,KAAA,MAAW,aAAa,KAAO,EAAA;AAC7B,MAAgB,eAAA,CAAA,GAAA,CAAI,WAAW,IAAI,CAAA,CAAA;AAAA,KACrC;AAEA,IAAA,MAAM,UAAwC,EAAC,CAAA;AAC/C,IAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,OAAQ,CAAA,OAAA,CAAQ,QAAQ,CAAK,EAAA,EAAA;AAC/C,MAAM,MAAA,MAAA,GAAS,OAAQ,CAAA,OAAA,CAAQ,CAAC,CAAA,CAAA;AAChC,MAAA,IAAI,EAAE,YAAgB,IAAA,MAAA,CAAA;AAAS,QAAA,SAAA;AAE/B,MAAA,OAAA,CAAQ,IAAK,CAAA;AAAA,QACX,MAAM,MAAO,CAAA,UAAA;AAAA,QACb,QAAQ,KAAM,CAAA,GAAA;AAAA,UACZ,CAAC,KAAA,KAAW,KAAM,CAAA,OAAA,CAAQ,CAAC,CAA6B,CAAA,UAAA;AAAA,SAC1D;AAAA,OACD,CAAA,CAAA;AAAA,KACH;AAEA,IAAA,IAAI,QAAQ,IAAM,EAAA;AAChB,MAAA,OAAA,CAAQ,IAAK,CAAA;AAAA,QACX,MAAM,OAAQ,CAAA,IAAA;AAAA,QACd,QAAQ,KAAM,CAAA,GAAA,CAAI,CAAC,KAAU,KAAA,KAAA,CAAM,QAAQ,IAAc,CAAA;AAAA,OAC1D,CAAA,CAAA;AAAA,KACH;AAEA,IAAA,IAAI,QAAQ,KAAO,EAAA;AACjB,MAAA,OAAA,CAAQ,IAAK,CAAA;AAAA,QACX,MAAM,OAAQ,CAAA,KAAA;AAAA,QACd,QAAQ,KAAM,CAAA,GAAA,CAAI,CAAC,KAAU,KAAA,KAAA,CAAM,QAAQ,KAAe,CAAA;AAAA,OAC3D,CAAA,CAAA;AAAA,KACH;AAEA,IAAA,IAAA,EAAA,CAAA;AACA,IAAA,kBAAA,CAAmB,IAAK,CAAA;AAAA,MACtB,OAAA;AAAA,MACA,OAAO,KAAO,EAAA;AACZ,QAAA,MAAM,SAAY,GAAA,KAAA,KAAU,KAAY,CAAA,GAAA,KAAA,CAAA,GAAY,MAAM,KAAK,CAAA,CAAA;AAE/D,QAAA,iBAAA;AAAA,UACE,eAAA;AAAA,UACA,OAAA;AAAA,UACA,SAAA;AAAA,UACA,SAAA;AAAA,UACA,KAAU,KAAA,KAAA,CAAA,GAAY,KAAY,CAAA,GAAA,MAAA,CAAO,KAAK,CAAA;AAAA,SAChD,CAAA;AAEA,QAAA,IAAI,SAAW,EAAA;AACb,UAAA,eAAA,CAAgB,OAAO,SAAS,CAAA,CAAA;AAAA,SAClC;AAEA,QAAA,IAAI,CAAC,EAAE,IAAQ,IAAA,eAAA,CAAgB,IAAM,EAAA;AACnC,UAAA,UAAA,CAAW,iBAAiB,CAAC,GAAG,eAAgB,CAAA,IAAA,EAAM,CAAC,CAAA,CAAA;AAEvD,UAAI,IAAA,CAAC,gBAAgB,SAAW,EAAA;AAC9B,YAAA,eAAA,CAAgB,SAAY,GAAA,IAAA,CAAA;AAC5B,YAAI,GAAA,CAAA,IAAA,CAAK,gBAAgB,cAAc,CAAA,CAAA;AAAA,WACzC;AAAA,SACF;AAAA,OACF;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AAEA,EAAA,MAAM,eAAe,WAAY,CAAA,MAAA;AAAA,IAC/B,CAAC,KAAO,EAAA,CAAA,KAAM,CAAC,eAAA,CAAgB,GAAI,CAAA,CAAC,CAAK,IAAA,CAAC,eAAgB,CAAA,GAAA,CAAI,KAAK,CAAA;AAAA,GACrE,CAAA;AACA,EAAA,IAAI,aAAa,MAAQ,EAAA;AACvB,IAAA,UAAA;AAAA,MACE,eAAA;AAAA,MACA,YAAa,CAAA,GAAA,CAAI,CAAC,CAAA,KAAOe,qCACpB,CADoB,CAAA,EAAA;AAAA,QAEvB,SAAS,CAAE,CAAA,UAAA;AAAA,QACX,aAAa,CAAE,CAAA,OAAA;AAAA,QACf,OAAS,EAAA,CAAA,CAAE,OAAQ,CAAA,OAAA,GACfA,eAAK,CAAAf,gBAAA,CAAA,EAAA,EAAA,CAAA,CAAE,OAAP,CAAA,EAAA,EAAgB,OAAS,EAAA,CAAA,CAAE,WAAY,EAAA,CAAA,GACvC,CAAE,CAAA,OAAA;AAAA,OACN,CAAA,CAAA;AAAA,KACJ,CAAA;AAAA,GACF;AACF,CAAA,CAAA;AAEA,MAAM,kBAAA,GAAqB,CACzB,MACA,EAAA,EAAE,WAAW,cAAgB,EAAA,EAAE,KAAM,EAAA,EACrB,KAAA;AAnLlB,EAAA,IAAA,EAAA,CAAA;AAoLE,EAAA,MAAM,cAA2B,EAAC,CAAA;AAClC,EAAW,KAAA,MAAA,GAAA,IAAO,UAAU,KAAO,EAAA;AACjC,IAAM,MAAA,MAAA,GAAS,SAAU,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAClC,IAAI,IAAA,CAAC,OAAO,IAAK,CAAA,OAAA;AAAS,MAAA,SAAA;AAE1B,IAAA,MAAM,IAAO,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,IAAK,CAAA,IAAA,KAAZ,IAAoB,GAAA,EAAA,GAAA,GAAA,CAAA;AACjC,IAAI,IAAA,uBAAA,CAAwB,OAAO,IAAI,CAAA;AAAG,MAAA,SAAA;AAE1C,IAAY,WAAA,CAAA,IAAA;AAAA,MACV,GAAG,MAAO,CAAA,IAAA,CAAK,OAAQ,CAAA,GAAA;AAAA,QACrB,CAAC,EAGE,KAAA;AAHF,UACU,IAAA,EAAA,GAAA,EAAA,EAAA;AAAA,YAAT,OAAS,EAAA,EAAA;AAAA,cADV,EACU,EAAA,EAAA,GAAA,EAAA,EAAE,EAAS,OAAA,EAAA,OAAA,EAAS,OAAO,MA/L9C,EAAA,GA+LmB,EAAsC,EAAA,OAAA,GAAA,SAAA,CAAtC,IAAsC,CAApC,SAAA,EAAS,WAAS,OAAO,EAAA,QAAA,CAAA,CAAA,EACjC,kBAFJ,EAEI,EAAA;AAAA,YADH,SAAA;AAAA,WAAA,CAAA,CAAA;AAEK,UAAA,OAAAe,eAAA,CAAAf,gBAAA,CAAA;AAAA,YACL,OAAS,EAAA;AAAA,cACP;AAAA,gBACE,OAAA;AAAA,gBACA,OAAA;AAAA,gBACA,KAAA;AAAA,gBACA,MAAA;AAAA,gBACA,MAAQ,EAAA,IAAA;AAAA,eACV;AAAA,aACF;AAAA,WAAA,EACG,KAVE,CAAA,EAAA;AAAA,YAWL,SAAS,OAAQ,CAAA,OAAA,GACb,MAAO,CAAA,SAAA,GACLe,qCACK,OADL,CAAA,EAAA;AAAA,cAEE,SAASG,kBAAQ,CAAA,OAAA,CAAQ,OAAO,CAAA,CAAE,IAAIf,sBAAW,CAAA;AAAA,iBAEnD,OACF,GAAA,OAAA;AAAA,YACJ,UAAA,EAAY,CAAC,EAAE,OAAA,EAAS,SAAS,KAAO,EAAA,MAAA,EAAQ,MAAQ,EAAA,GAAA,EAAK,CAAA;AAAA,YAC7D,aAAa,OAAQ,CAAA,OAAA;AAAA,WACvB,CAAA,CAAA;AAAA,SAAA;AAAA,OACF;AAAA,KACF,CAAA;AAAA,GACF;AAEA,EAAI,IAAA,SAAA,CAAU,QAAS,CAAA,SAAA,CAAU,OAAS,EAAA;AACxC,IAAY,WAAA,CAAA,IAAA;AAAA,MACV,GAAG,UAAU,QAAS,CAAA,SAAA,CAAU,QAAQ,GAAI,CAAA,CAAC,CAAO,KAAAY,eAAA,CAAAf,gBAAA,CAAA,EAAA,EAC/C,CAD+C,CAAA,EAAA;AAAA,QAElD,OAAS,EAAA,MAAA,CAAO,SACZ,GAAA,CAAA,CAAE,OAAQ,CAAA,GAAA;AAAA,UAAI,CAAC,CAAA,KACb,QAAY,IAAA,CAAA,GAAIe,eAAK,CAAAf,gBAAA,CAAA,EAAA,EAAA,CAAA,CAAA,EAAL,EAAQ,MAAA,EAAQG,sBAAY,CAAA,CAAA,CAAE,MAAM,CAAA,EAAM,CAAA,GAAA,CAAA;AAAA,YAE5D,CAAE,CAAA,OAAA;AAAA,QACN,YAAY,CAAE,CAAA,OAAA;AAAA,QACd,OAAA,EACE,EAAE,OAAQ,CAAA,OAAA,IAAW,OAAO,SACxB,GAAAY,eAAA,CAAAf,gBAAA,CAAA,EAAA,EACK,EAAE,OADP,CAAA,EAAA;AAAA,UAEE,SAASkB,kBAAQ,CAAA,CAAA,CAAE,QAAQ,OAAO,CAAA,CAAE,IAAIf,sBAAW,CAAA;AAAA,aAErD,CAAE,CAAA,OAAA;AAAA,QACR,WAAA,EAAa,EAAE,OAAQ,CAAA,OAAA;AAAA,OACvB,CAAA,CAAA;AAAA,KACJ,CAAA;AAAA,GACF;AAEA,EAAO,OAAA,WAAA,CAAA;AACT,CAAA,CAAA;AAEA,MAAM,4BAAA,GAA+B,CACnC,MAAA,EACA,WACsB,KAAA;AACtB,EAAO,OAAA,WAAA,CAAY,GAAI,CAAA,CAAC,SAAc,KAAA;AACpC,IAAA,cAAA,CAAe,UAAU,OAAO,CAAA,CAAA;AAEhC,IAAO,OAAA,iBAAA,CAAkBY,eACpB,CAAAf,gBAAA,CAAA,EAAA,EAAA,SAAA,CAAU,OADU,CAAA,EAAA;AAAA,MAEvB,SACE,SAAU,CAAA,OAAA,CAAQ,YAAY,KAC1B,CAAA,GAAA,KAAA,CAAA,GACA,OAAO,SACP,GAAAkB,kBAAA,CAAQ,UAAU,OAAQ,CAAA,OAAO,EAAE,GAAI,CAAAf,sBAAW,IAClDe,kBAAQ,CAAA,SAAA,CAAU,QAAQ,OAAO,CAAA;AAAA,MACvC,SAAS,SAAU,CAAA,OAAA;AAAA,MACnB,MAAM,SAAU,CAAA,IAAA;AAAA,MAChB,YAAY,SAAU,CAAA,UAAA;AAAA,MACtB,aAAa,SAAU,CAAA,WAAA;AAAA,KACxB,CAAA,CAAA,CAAA;AAAA,GACF,CAAA,CAAA;AACH,CAAA,CAAA;AAEA,MAAM,cAAA,GAAiB,CAAC,KAIlB,KAAA;AACJ,EAAA,IAAI,MAAM,KAAU,KAAA,OAAA;AAAS,IAAA,KAAA,CAAM,KAAQ,GAAA,KAAA,CAAA,CAAA;AAC3C,EAAA,IAAI,CAAC,KAAM,CAAA,MAAA;AAAQ,IAAA,KAAA,CAAM,MAAS,GAAA,KAAA,CAAA,CAAA;AAClC,EAAA,IAAI,MAAM,gBAAqB,KAAA,KAAA;AAAO,IAAA,KAAA,CAAM,gBAAmB,GAAA,KAAA,CAAA,CAAA;AACjE,CAAA,CAAA;AAEA,MAAM,iBAAA,GAAoB,CACxB,KAMG,KAAA;AACH,EAAA,IAAI,aAAgB,GAAA,KAAA,CAAA;AACpB,EAAA,MAAM,OAAU,GAAA,KAAA,CAAM,OAAQ,CAAA,GAAA,CAAI,CAAC,MAAW,KAAA;AAC5C,IAAM,MAAA,MAAA,GAASH,qCACV,MADU,CAAA,EAAA;AAAA,MAEb,UAAY,EAAA,KAAA,CAAA;AAAA,MACZ,eAAe,YAAgB,IAAA,MAAA;AAAA,KACjC,CAAA,CAAA;AACA,IAAA,IAAI,MAAO,CAAA,aAAA;AAAe,MAAgB,aAAA,GAAA,IAAA,CAAA;AAC1C,IAAO,OAAA,MAAA,CAAA;AAAA,GACR,CAAA,CAAA;AAED,EAAA,OAAOA,qCACF,KADE,CAAA,EAAA;AAAA,IAEL,UAAY,EAAA,KAAA,CAAA;AAAA,IACZ,SAAW,EAAA,KAAA,CAAA;AAAA,IACX,IAAM,EAAA,KAAA,CAAA;AAAA,IACN,OAAA,EAAS,CAAC,CAAC,KAAM,CAAA,IAAA;AAAA,IACjB,KAAO,EAAA,KAAA,CAAA;AAAA,IACP,QAAA,EAAU,CAAC,CAAC,KAAM,CAAA,KAAA;AAAA,IAClB,OAAA;AAAA,IACA,aAAA;AAAA,GACF,CAAA,CAAA;AACF,CAAA,CAAA;AAOA,MAAM,oBAAoB,CACxB,OAAA,EACA,uBACA,WACA,EAAA,eAAA,EACA,WACA,MACG,KAAA;AACH,EAAM,MAAA,iBAAA,GAAoB,kBAAkB,OAAO,CAAA,CAAA;AAEnD,EAAM,MAAA,EAAE,KAAO,EAAA,MAAA,EAAW,GAAA,2BAAA;AAAA,IACxB,iBAAA;AAAA,IACA,qBAAA;AAAA,IACA,WAAA;AAAA,IACA,eAAA;AAAA,IACA,SAAA;AAAA,IACA,MAAA;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,cAAiB,GAAA,KAAA,CAAM,MAAU,IAAA,kBAAA,CAAmB,iBAAiB,CAAA,CAAA;AAE3E,EAAO,OAAA,EAAE,KAAO,EAAA,MAAA,EAAQ,cAAe,EAAA,CAAA;AACzC,CAAA,CAAA;AAEA,MAAM,8BAA8B,CAClC,OAAA,EACA,uBACA,WACA,EAAA,eAAA,EACA,WACA,MACgB,KAAA;AAzVlB,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AA0VE,EAAA,MAAM,QAA2B,EAAC,CAAA;AAClC,EAAA,MAAM,SAAiC,EAAC,CAAA;AAExC,EAAA,MAAyD,cAAjD,EAAS,OAAA,EAAA,SAAA,KAAwC,EAA1B,EAAA,qBAAA,GAAA,SAAA,CAA0B,IAA1B,CAAvB,SAAA,CAAA,CAAA,CAAA;AAER,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,qBAAA,CAAsB,QAAQ,CAAK,EAAA,EAAA;AACrD,IAAI,IAAA,eAAA,CAAgB,IAAI,CAAC,CAAA;AAAG,MAAA,SAAA;AAE5B,IAA+C,MAAA,EAAA,GAAA,qBAAA,CAAsB,CAAC,CAA9D,EAAA,EAAA,OAAA,EAAS,aAA8B,GAAA,EAAA,EAAd,SAAc,GAAA,SAAA,CAAA,EAAA,EAAd,CAAzB,SAAA,CAAA,CAAA,CAAA;AACR,IAAA,IACE,UAAU,MAAW,KAAA,WAAA,CAAY,MACjC,IAAA,CAAC,UAAU,IAAK,CAAA,CAAC,QAAUI,EAAAA,EAAAA,KAAM,CAACR,sBAAY,CAAA,QAAA,EAAU,YAAYQ,EAAC,CAAC,CAAC,CACvE,EAAA;AACA,MAAA,IAAI,CAAmB,GAAA,qBAAA,CAAA;AACvB,MAAA,IAAI,CAAI,GAAA,SAAA,CAAA;AACR,MAAA,MAAM,YAAW,EAAE,GAAA,CAAA,CAAA,IAAA,KAAF,IAAU,GAAA,EAAA,GAAAC,mBAAA,CAAa,WAAW,SAAS,CAAA,CAAA;AAC5D,MAAI,IAAA,CAAA,CAAE,IAAS,KAAA,CAAA,CAAE,IAAM,EAAA;AACrB,QAAA,CAAA,GAAIL,eAAK,CAAAf,gBAAA,CAAA,EAAA,EAAA,CAAA,CAAA,EAAL,EAAQ,IAAA,EAAM,KAAU,CAAA,EAAA,CAAA,CAAA;AAC5B,QAAA,CAAA,GAAIe,qCACC,CADD,CAAA,EAAA;AAAA,UAEF,IAAM,EAAA,KAAA,CAAA;AAAA,UACN,UAAY,EAAA,KAAA,CAAA;AAAA,UACZ,WAAa,EAAA,KAAA,CAAA;AAAA,SACf,CAAA,CAAA;AACA,QAAA,IAAI,CAAE,CAAA,QAAA,IAAY,CAAC,CAAA,CAAE,QAAU,EAAA;AAC7B,UAAE,CAAA,CAAA,QAAA,GAAA,CAAW,EAAO,GAAA,MAAA,CAAA,QAAA,KAAP,IAAmB,GAAA,EAAA,GAAA,SAAA,CAAA;AAAA,SAClC;AAEA,QAAI,IAAAJ,sBAAA,CAAY,CAAG,EAAA,CAAC,CAAG,EAAA;AACrB,UAAM,KAAA,CAAA,IAAA,CAAK,WAAY,CAAA,CAAC,CAAC,CAAA,CAAA;AACzB,UAAO,MAAA,CAAA,IAAA;AAAA,YACL,qBAAA,CAAsB,IAAS,KAAA,QAAA,GAAW,QAAW,GAAA,KAAA,CAAA;AAAA,WACvD,CAAA;AAAA,SACF;AAAA,OACK,MAAA;AACL,QAAA,MAKI,EAHF,GAAA,SAAA,CAAA,CAEG,oBAAA,GAAA,SAAA,CACD,EADC,EAAA;AAAA;AAAA,UAFH,YAAA;AAAA,UACA,aAAA;AAAA,SAAA,EAAA;AAGF,QAAI,IAAAA,sBAAA,CAAY,qBAAuB,EAAA,oBAAoB,CAAG,EAAA;AAC5D,UAAM,KAAA,CAAA,IAAA,CAAK,WAAY,CAAA,CAAC,CAAC,CAAA,CAAA;AACzB,UAAA,MAAA,CAAO,KAAK,KAAS,CAAA,CAAA,CAAA;AAAA,SACvB;AAAA,OACF;AAEA,MAAA,IAAI,KAAM,CAAA,MAAA,IAAU,CAAC,kBAAA,CAAmB,SAAS,CAAG,EAAA;AAClD,QAAgB,eAAA,CAAA,GAAA,CAAI,GAAG,IAAI,CAAA,CAAA;AAAA,OAC7B;AAAA,KACF;AAAA,GACF;AAEA,EAAO,OAAA,EAAE,OAAO,MAAO,EAAA,CAAA;AACzB,CAAA,CAAA;AAEA,MAAM,qBAAqB,CACzB,KAAA,KACG,MAAM,OAAW,IAAA,KAAA,CAAM,YAAY,KAAM,CAAA,aAAA,CAAA;AAE9C,MAAM,oBAAoB,CACxB;AAAA,EACE,cAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,eAAA;AAAA,EACA,UAAA;AACF,CACA,EAAA,OAAA,EACA,SACA,EAAA,KAAA,EACA,MACG,KAAA;AAlaL,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAmaE,EAAA,IAAI,CAAC,KAAO,EAAA;AACV,IAAM,MAAA,SAAA,GACJ,QAAQ,IAAS,KAAAS,mBAAA,CAAa,eAAe,IAAM,EAAA,SAAS,CACxD,GAAA,KAAA,CAAA,GACA,OAAQ,CAAA,IAAA,CAAA;AAEd,IAAA,IAAI,UAAU,MAAW,KAAA,CAAA,IAAK,QAAY,IAAA,SAAA,CAAU,CAAC,CAAG,EAAA;AACtD,MAAA,MAAM,MAAS,GAAA,eAAA,CAAgB,SAAU,CAAA,CAAC,EAAE,MAAM,CAAA,CAAA;AAClD,MAAA,IAAI,MAAQ,EAAA;AACV,QAAC,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,KAAK,IAAK,EAAA,OAAA,KAAjB,eAAiB,OAAY,GAAA,IAAI,IAAK,CAAA;AAAA,UACrC,OAAS,EAAA,OAAA;AAAA,UACT,IAAM,EAAA,SAAA;AAAA,SACP,CAAA,CAAA;AACD,QAAA,OAAA;AAAA,OACF;AAAA,KACF;AAEA,IAAA,CAAA,CAAC,0BAAe,IAAK,EAAA,OAAA,KAApB,eAAoB,OAAY,GAAA,IAAI,IAAK,CAAA;AAAA,MACxC,OAAS,EAAA,SAAA;AAAA,MACT,OAAS,EAAA,OAAA;AAAA,MACT,IAAM,EAAA,SAAA;AAAA,KACP,CAAA,CAAA;AAAA,aACQ,MAAQ,EAAA;AACjB,IAAA,UAAA,CAAW,IAAK,CAAA;AAAA,MACd,IAAM,EAAA,iBAAA;AAAA,MACN,IAAM,EAAA,OAAA;AAAA,MACN,WAAa,EAAA,MAAA;AAAA,MACb,WAAW,SAAU,CAAA,KAAA;AAAA,MACrB,MAAM,OAAQ,CAAA,IAAA;AAAA,MACd,EAAI,EAAA,MAAA;AAAA,KACL,CAAA,CAAA;AAAA,GACH;AACF,CAAA,CAAA;AAMA,MAAM,aAAa,CACjB,EAAE,cAAgB,EAAA,eAAA,IAClB,GACG,KAAA;AA5cL,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AA6cE,EAAA,MAAM,WAAW,EAAe,GAAA,CAAA,EAAA,GAAA,cAAA,CAAA,GAAA,EAAI,OAAnB,KAAA,IAAA,GAAA,EAAA,GAAA,EAAA,CAAmB,UAAY,EAAC,CAAA;AACjD,EAAA,KAAA,MAAW,SAAS,GAAK,EAAA;AACvB,IAAI,IAAA,KAAA,CAAM,QAAQ,MAAW,KAAA,CAAA,IAAK,YAAY,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAG,EAAA;AAC9D,MAAM,MAAA,MAAA,GACJ,iBACI,KAAM,CAAA,WAAA,IAAe,MAAM,OAAS,EAAA,CAAC,EAAyB,MAClE,CAAA,CAAA;AACF,MAAA,IAAI,MAAQ,EAAA;AACV,QAAC,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,GAAG,IAAK,EAAA,OAAA,KAAf,eAAe,OAAY,GAAA,EAAI,EAAA,IAAA,CAAK,KAAK,CAAA,CAAA;AAC1C,QAAA,SAAA;AAAA,OACF;AAAA,KACF;AAEA,IAAA,OAAA,CAAQ,KAAK,KAAK,CAAA,CAAA;AAAA,GACpB;AACF,CAAA;;;;;;;;;;;;;;;;;;;;;AClcA,MAAM,YAEF,GAAA;AAAA,EACF,IAAM,EAAA,GAAA;AAAA,EACN,OAAS,EAAA,GAAA;AAAA,EACT,MAAQ,EAAA,GAAA;AACV,CAAA,CAAA;AAEA,MAAM,iBAAiB,EAAC,CAAA;AAGxB,KAAA,MAAW,OAAO,YAAc,EAAA;AAC9B,EACE,cAAA,CAAA,YAAA,CACE,GACF,CACF,CAAI,GAAA,GAAA,CAAA;AACN,CAAA;AAEA,MAAM,aAEF,GAAA;AAAA,EACF,WAAa,EAAA,GAAA;AAAA,EACb,QAAU,EAAA,GAAA;AAAA,EACV,OAAS,EAAA,GAAA;AAAA,EACT,UAAY,EAAA,GAAA;AAAA,EACZ,aAAe,EAAA,GAAA;AACjB,CAAA,CAAA;AAEA,MAAM,kBAAkB,EAAC,CAAA;AAGzB,KAAA,MAAW,OAAO,aAAe,EAAA;AAC/B,EACE,eAAA,CAAA,aAAA,CACE,GACF,CACF,CAAI,GAAA,GAAA,CAAA;AACN,CAAA;AAEO,MAAM,qBAAqB,CAChC,MAAA,EACA,GACA,EAAA,YAAA,EACA,eACA,WACS,KAAA;AAxEX,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAyEE,EAAA,KAAA,MAAW,mBAAmB,YAAc,EAAA;AAC1C,IAAA,MAAM,eAAkB,GAAA,gBAAA;AAAA,MACtB,MAAA;AAAA,MACA,eAAA;AAAA,MACA,aAAA;AAAA,KACF,CAAA;AAEA,IAAA,MAAM,EAAE,SAAW,EAAA,WAAA,EAAa,cAAgB,EAAA,MAAA,EAAQ,iBACtD,GAAA,eAAA,CAAA;AACF,IAAA,MAAM,EAAE,KAAA,EAAO,GAAK,EAAA,IAAA,EAAS,GAAA,cAAA,CAAA;AAC7B,IAAA,IAAI,OAAU,GAAA,KAAA,CAAA;AAEd,IAAW,KAAA,MAAA,YAAA,IAAgB,YAAY,WAAa,EAAA;AAClD,MAAM,MAAA,EAAE,UAAY,EAAA,YAAA,EAAiB,GAAA,YAAA,CAAA;AACrC,MAAA,IAAI,CAAC,YAAA;AAAc,QAAA,SAAA;AAEnB,MAAM,MAAA,gBAAA,GAAmB,aAAa,OAAQ,CAAA,IAAA;AAAA,QAAK,CAAC,MAAA,KAClD,uBAAwB,CAAA,KAAA,EAAO,MAAM,CAAA;AAAA,OACvC,CAAA;AACA,MAAI,IAAA,gBAAA;AAAkB,QAAA,SAAA;AAEtB,MAAA,MAAM,eACJ,WACE,CAAA,CAAA,EAAG,YAAa,CAAA,aAAA,CAAA,CAAA,EAAiB,aAAa,YAChD,CAAA,CAAA,CAAA,CAAA;AACF,MAAA,MAAM,0BACJ,YACA,IAAA,YAAA,CAAa,cAAe,CAAA,IAAA,CAAK,CAAC,MAAW,KAAA;AAC3C,QAAM,MAAA,GAAA,GAAM,uBAAwB,CAAA,YAAA,EAAc,MAAM,CAAA,CAAA;AAExD,QAAO,OAAA,GAAA,CAAA;AAAA,OACR,CAAA,CAAA;AACH,MAAI,IAAA,uBAAA;AAAyB,QAAA,SAAA;AAE7B,MAAA,IAAI,KAAQ,GAAA,KAAA,CAAA;AACZ,MAAI,IAAA,MAAA,CAAA;AACJ,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,eAAA,CAAgB,QAAQ,CAAK,EAAA,EAAA;AAC/C,QAAM,MAAA,cAAA,GAAiB,gBAAgB,CAAC,CAAA,CAAA;AACxC,QAAA,MAAM,iBAAiB,cAAe,CAAA,UAAA,CAAA;AACtC,QAAI,IAAAT,sBAAA,CAAY,YAAc,EAAA,cAAc,CAAG,EAAA;AAC7C,UAAQ,KAAA,GAAA,IAAA,CAAA;AACR,UAAgB,eAAA,CAAA,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA;AAE3B,UAAA,MAAM,QACJ,GAAA,CAAA,EAAA,GAAA,cAAA,CAAe,cAAe,CAAA,IAAA,KAA9B,IACA,GAAA,EAAA,GAAAU,wBAAA;AAAA,YACE,SAAU,CAAA,KAAA;AAAA,YACV,cAAA;AAAA,YACA,MAAO,CAAA,SAAA;AAAA,WACT,CAAA;AACF,UAAI,IAAA,QAAA,KAAa,aAAa,IAAM,EAAA;AAClC,YAAS,MAAA,GAAA,QAAA,CAAA;AAAA,WACX;AAAA,SACF;AAAA,OACF;AAEA,MAAA,IAAI,CAAC,KAAO,EAAA;AACV,QAAA,MAAM,UAAa,GAAA,4BAAA;AAAA,UACjB,MAAA;AAAA,UACA,YAAA;AAAA,UACA,YAAA;AAAA,SACF,CAAA;AAEA,QACE,IAAA,YAAA,CAAa,QAAQ,MAAW,KAAA,CAAA,IAChC,gBAAgB,YAAa,CAAA,OAAA,CAAQ,CAAC,CAAC,CACvC,EAAA;AACA,UAAA,MAAM,MAAS,GAAA,eAAA,CAAgB,YAAa,CAAA,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AACtD,UAAC,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,KAAK,IAAK,EAAA,WAAA,KAAjB,eAAiB,WAAgB,GAAA,IAAI,IAAK,CAAA;AAAA,YACzC,SAAA,EAAW,WAAW,UAAW,CAAA,SAAA;AAAA,YACjC,cAAA,EAAgB,WAAW,UAAW,CAAA,cAAA;AAAA,YACtC,OAAA,EAAS,WAAW,UAAW,CAAA,OAAA;AAAA,WAChC,CAAA,CAAA;AAAA,SACI,MAAA;AACL,UAAA,CAAA,CAAC,UAAK,WAAL,KAAA,IAAA,GAAA,EAAA,GAAA,IAAA,CAAK,cAAgB,EAAC,EAAG,KAAK,UAAU,CAAA,CAAA;AAAA,SAC3C;AAEA,QAAU,OAAA,GAAA,IAAA,CAAA;AAAA,iBACD,MAAQ,EAAA;AACjB,QAAA,GAAA,CAAI,IAAK,CAAA;AAAA,UACP,IAAM,EAAA,iBAAA;AAAA,UACN,IAAM,EAAA,YAAA;AAAA,UACN,WAAa,EAAA,MAAA;AAAA,UACb,WAAW,SAAU,CAAA,KAAA;AAAA,UACrB,MAAM,YAAa,CAAA,IAAA;AAAA,UACnB,EAAI,EAAA,MAAA;AAAA,SACL,CAAA,CAAA;AAAA,OACH;AAAA,KACF;AAEA,IAAA,IAAI,gBAAgB,MAAQ,EAAA;AAC1B,MAAA,MAAM,WAAe,GAAA,CAAA,EAAA,GAAA,GAAA,CAAI,WAAJ,KAAA,IAAA,GAAA,EAAA,GAAA,GAAA,CAAI,cAAgB,EAAC,CAAA;AAC1C,MAAA,KAAA,MAAW,EAAE,cAAA,EAAgB,UAAW,EAAA,IAAK,eAAiB,EAAA;AAC5D,QACE,IAAA,UAAA,CAAW,QAAQ,MAAW,KAAA,CAAA,IAC9B,gBAAgB,UAAW,CAAA,OAAA,CAAQ,CAAC,CAAC,CACrC,EAAA;AACA,UAAA,MAAM,MAAS,GAAA,eAAA,CAAgB,UAAW,CAAA,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AACpD,UAAC,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,GAAG,IAAK,EAAA,WAAA,KAAf,eAAe,WAAgB,GAAA,IAAI,IAAK,CAAA;AAAA,YACvC,WAAW,UAAW,CAAA,YAAA;AAAA,YACtB,cAAA,EAAgB,eAAe,UAAW,CAAA,cAAA;AAAA,YAC1C,OAAA,EAAS,eAAe,UAAW,CAAA,OAAA;AAAA,WACpC,CAAA,CAAA;AAAA,SACI,MAAA;AACL,UAAA,WAAA,CAAY,KAAK,cAAc,CAAA,CAAA;AAAA,SACjC;AAAA,OACF;AAEA,MAAU,OAAA,GAAA,IAAA,CAAA;AAAA,KACZ;AAEA,IAAI,IAAA,OAAA,IAAW,CAAC,eAAA,CAAgB,SAAW,EAAA;AACzC,MAAA,eAAA,CAAgB,SAAY,GAAA,IAAA,CAAA;AAC5B,MAAI,GAAA,CAAA,IAAA,CAAK,gBAAgB,cAAc,CAAA,CAAA;AAAA,KACzC;AAAA,GACF;AACF,CAAA,CAAA;AAEA,MAAM,gBAAA,GAAmB,CACvB,MAAA,EACA,EAAE,SAAA,EAAW,gBAAgB,EAAE,KAAA,EAAQ,EAAA,EACvC,aACqB,KAAA;AAnMvB,EAAA,IAAA,EAAA,CAAA;AAoME,EAAA,MAAM,kBAAoC,EAAC,CAAA;AAC3C,EAAW,KAAA,MAAA,GAAA,IAAO,UAAU,KAAO,EAAA;AACjC,IAAM,MAAA,MAAA,GAAS,SAAU,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAClC,IAAI,IAAA,CAAC,OAAO,IAAK,CAAA,WAAA;AAAa,MAAA,SAAA;AAE9B,IAAA,MAAM,IAAO,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,IAAK,CAAA,IAAA,KAAZ,IAAoB,GAAA,EAAA,GAAA,GAAA,CAAA;AACjC,IAAI,IAAA,uBAAA,CAAwB,OAAO,IAAI,CAAA;AAAG,MAAA,SAAA;AAE1C,IAAgB,eAAA,CAAA,IAAA;AAAA,MACd,GAAG,MAAO,CAAA,IAAA,CAAK,WAAY,CAAA,GAAA,CAAI,CAAC,CAAM,KAAA;AA7M5C,QAAAC,IAAAA,GAAAA,CAAAA;AA8MQ,QAAM,MAAA,OAAA,GAAU,CAAC,IAAI,CAAA,CAAA;AAErB,QAAM,MAAA,SAAA,GAAY,iBAAkB,CAAA,CAAA,CAAE,SAAS,CAAA,CAAA;AAE/C,QAAO,OAAA,eAAA;AAAA,UACL,MAAA;AAAA,UACA;AAAA,YACE,IAAMA,EAAAA,CAAAA,GAAAA,GAAA,CAAE,CAAA,OAAA,KAAF,gBAAAA,GAAW,CAAA,IAAA;AAAA,YACjB,UAAY,EAAA;AAAA,cACV,OAAA,EAAS,CAAC,GAAG,CAAA;AAAA,cACb,SAAA;AAAA,cACA,gBAAgB,CAAE,CAAA,cAAA;AAAA,cAClB,SAAS,CAAE,CAAA,OAAA;AAAA,aACb;AAAA,WACF;AAAA,UACA;AAAA,YACE,OAAA;AAAA,YACA,SAAA;AAAA,YACA,gBAAgB,CAAE,CAAA,cAAA;AAAA,YAClB,SAAS,CAAE,CAAA,OAAA;AAAA,WACb;AAAA,UACA,aAAA;AAAA,SACF,CAAA;AAAA,OACD,CAAA;AAAA,KACH,CAAA;AAAA,GACF;AAEA,EAAI,IAAA,SAAA,CAAU,QAAS,CAAA,SAAA,CAAU,WAAa,EAAA;AAC5C,IAAA,KAAA,MAAW,eAAmB,IAAA,SAAA,CAAU,QAAS,CAAA,SAAA,CAAU,WAAa,EAAA;AACtE,MAAM,MAAA,EAAE,UAAY,EAAA,IAAA,EAAS,GAAA,eAAA,CAAA;AAC7B,MAAA,IAAI,CAAC,IAAA;AAAM,QAAA,SAAA;AAEX,MAAM,MAAA,SAAA,GAAY,iBAAkB,CAAA,IAAA,CAAK,SAAS,CAAA,CAAA;AAElD,MAAgB,eAAA,CAAA,IAAA;AAAA,QACd,eAAA;AAAA,UACE,MAAA;AAAA,UACAP,qCACK,eADL,CAAA,EAAA;AAAA,YAEE,UAAA,EAAYA,qCACP,IADO,CAAA,EAAA;AAAA,cAEV,SAAA;AAAA,aACF,CAAA;AAAA,WACF,CAAA;AAAA,UACAA,qCACK,IADL,CAAA,EAAA;AAAA,YAEE,SAAA;AAAA,YACA,OAAA,EAAS,OAAO,SACZ,GAAA,IAAA,CAAK,QAAQ,GAAI,CAAAZ,sBAAW,IAC5B,IAAK,CAAA,OAAA;AAAA,YACT,cAAA,EAAgB,OAAO,SACnB,GAAA,IAAA,CAAK,eAAe,GAAI,CAAAA,sBAAW,IACnC,IAAK,CAAA,cAAA;AAAA,WACX,CAAA;AAAA,UACA,aAAA;AAAA,SACF;AAAA,OACF,CAAA;AAAA,KACF;AAAA,GACF;AAEA,EAAO,OAAA,eAAA,CAAA;AACT,CAAA,CAAA;AAEa,MAAA,iBAAA,GAAoB,CAC/B,SACG,KAAA;AACH,EAAI,IAAA,OAAO,cAAc,QAAU,EAAA;AACjC,IAAA,MAAM,EAAE,MAAQ,EAAA,KAAA,EAAU,GAAA,KAAK,WAAa,GAAA,CAAA;AAC5C,IAAA,SAAA,GAAYS,0BAAoB,CAAA,EAAE,MAAQ,EAAA,IAAA,EAAM,OAAO,CAAA,CAAA;AAAA,GACzD;AACA,EAAO,OAAA,SAAA,CAAA;AACT,CAAA,CAAA;AAEA,MAAM,eAAkB,GAAA,CACtB,MACA,EAAA,cAAA,EACA,YACA,aACmB,KAAA;AACnB,EAAA,MAAM,EAAE,SAAA,EAAW,OAAS,EAAA,cAAA,EAAgB,SAAY,GAAA,UAAA,CAAA;AACxD,EAAA,MAAM,CAAC,MAAA,EAAQ,KAAK,CAAA,GAAIb,iCAA0B,SAAS,CAAA,CAAA;AAE3D,EAAO,OAAA;AAAA,IACL,UAAY,EAAA;AAAA,MACV,eAAe,MAAU,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA;AAAA,MACzB,YAAc,EAAA,KAAA;AAAA,MACd,OAAA;AAAA,MACA,gBAAgB,MAAO,CAAA,SAAA,GACnB,cAAe,CAAA,GAAA,CAAII,sBAAW,CAC9B,GAAA,cAAA;AAAA,MACJ,KAAO,EAAA,YAAA,CAAA,CAAa,OAAS,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,KAAA,KAAS,QAAQ,CAAA;AAAA,MAC9C,QAAU,EAAA,aAAA,CAAA,CAAc,OAAS,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,QAAA,KAAY,WAAW,CAAA;AAAA,MACxD,QAAU,EAAA,aAAA,CAAA,CAAc,OAAS,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,QAAA,KAAY,WAAW,CAAA;AAAA,KAC1D;AAAA,IACA,cAAA;AAAA,GACF,CAAA;AACF,CAAA,CAAA;AAEA,MAAM,4BAA+B,GAAA,CACnC,MACA,EAAA,YAAA,EACA,YACyD,MAAA;AAAA,EACzD,IAAA,EACE,aAAa,IACb,KAAAkB,wBAAA;AAAA,IACE,YAAa,CAAA,SAAA;AAAA,IACb,EAAE,YAAY,YAAa,EAAA;AAAA,IAC3B,MAAO,CAAA,SAAA;AAAA,GACT,GACI,SACA,YAAa,CAAA,IAAA;AAAA,EACnB,UAAY,EAAA;AAAA,IACV,SAAS,YAAa,CAAA,OAAA;AAAA,IACtB,SAAW,EAAA,CAAA,EAAG,YAAa,CAAA,aAAA,CAAA,CAAA,EAAiB,YAAa,CAAA,YAAA,CAAA,CAAA;AAAA,IACzD,gBAAgB,YAAa,CAAA,cAAA;AAAA,IAC7B,OAAS,EAAA;AAAA,MACP,OACE,YAAa,CAAA,KAAA,KAAU,MACnB,KACA,CAAA,GAAA,cAAA,CAAe,aAAa,KAAK,CAAA;AAAA,MACvC,UACE,YAAa,CAAA,QAAA,KAAa,MACtB,KACA,CAAA,GAAA,eAAA,CAAgB,aAAa,QAAQ,CAAA;AAAA,MAC3C,UACE,YAAa,CAAA,QAAA,KAAa,MACtB,KACA,CAAA,GAAA,eAAA,CAAgB,aAAa,QAAQ,CAAA;AAAA,KAC7C;AAAA,GACF;AACF,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;ACvUO,MAAM,aAAgB,GAAA,CAC3B,GACA,EAAA,eAAA,EACA,kBACS,KAAA;AAdX,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAeE,EAAM,MAAA,UAAA,GAAa,kBAAkB,eAAe,CAAA,CAAA;AACpD,EAAM,MAAA;AAAA,IACJ,WAAA;AAAA,IACA,cAAA,EAAgB,EAAE,GAAA,EAAK,KAAM,EAAA;AAAA,GAC3B,GAAA,eAAA,CAAA;AAEJ,EAAA,MAAM,cAAc,WAAY,CAAA,WAAA,CAAY,KAAK,CAAC,CAAA,KAAM,EAAE,KAAK,CAAA,CAAA;AAC/D,EAAA,IAAI,CAAC,WAAa,EAAA;AAChB,IAAA,IAAI,WAAW,MAAQ,EAAA;AACrB,MAAA,MAAM,WAAe,GAAA,CAAA,EAAA,GAAA,GAAA,CAAI,WAAJ,KAAA,IAAA,GAAA,EAAA,GAAA,GAAA,CAAI,cAAgB,EAAC,CAAA;AAC1C,MAAA,KAAA,MAAW,SAAS,UAAY,EAAA;AAC9B,QAAA,IAAI,MAAM,MAAU,IAAA,eAAA,CAAgB,eAAgB,CAAA,KAAA,CAAM,MAAM,CAAG,EAAA;AACjE,UAAA,MAAM,MAAS,GAAA,eAAA,CAAgB,eAAgB,CAAA,KAAA,CAAM,MAAM,CAAA,CAAA;AAC3D,UAAO,MAAA,CAAA,EAAA,CAAG,KAAK,KAAQ,GAAA,KAAA,CAAA;AAAA,SAClB,MAAA;AACL,UAAY,WAAA,CAAA,IAAA,CAAK,EAAE,KAAO,EAAA,KAAA,CAAM,KAAK,IAAM,EAAA,KAAA,CAAM,MAAM,CAAA,CAAA;AAAA,SACzD;AAAA,OACF;AAAA,KACF;AACA,IAAA,OAAA;AAAA,GACF;AAEA,EAAA,IAAI,IAAO,GAAA,CAAA,CAAA;AACX,EAAM,MAAA,eAAA,uBAAsB,GAAY,EAAA,CAAA;AACxC,EAAW,KAAA,MAAA,YAAA,IAAgB,YAAY,WAAa,EAAA;AAClD,IAAA,MAAM,EAAE,KAAA,EAAO,OAAS,EAAA,IAAA,EAAS,GAAA,YAAA,CAAA;AACjC,IAAA,IAAI,CAAC,OAAA;AAAS,MAAA,SAAA;AAEd,IAAM,MAAA,gBAAA,GAAA,CAAmB,EAAQ,GAAA,OAAA,CAAA,OAAA,KAAR,IAAiB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA;AAAA,MAAK,CAAC,MAAA,KAC9C,uBAAwB,CAAA,KAAA,EAAO,MAAM,CAAA;AAAA,KAAA,CAAA;AAEvC,IAAI,IAAA,gBAAA;AAAkB,MAAA,SAAA;AAEtB,IAAA,IAAI,WAAW,MAAQ,EAAA;AACrB,MAAA,IAAA,EAAA,CAAA;AACA,MAAA,kBAAA,CAAmB,IAAK,CAAA;AAAA,QACtB,OAAS,EAAA;AAAA,UACP;AAAA,YACE,MAAM,OAAQ,CAAA,UAAA;AAAA,YACd,QAAQ,UAAW,CAAA,GAAA,CAAI,CAAC,KAAA,KAAU,MAAM,GAAG,CAAA;AAAA,WAC7C;AAAA,SACF;AAAA,QACA,OAAO,KAAO,EAAA;AAzDtB,UAAAC,IAAAA,GAAAA,CAAAA;AA0DU,UAAA,IAAI,KAAU,KAAA,KAAA,CAAA;AAAW,YAAA,OAAA;AAEzB,UAAU,SAAA,CAAA,eAAA,EAAiB,SAAS,IAAI,CAAA,CAAA;AAExC,UAAA,IAAI,EAAE,IAAA,KAAS,CAAK,IAAA,CAAC,gBAAgB,SAAW,EAAA;AAC9C,YAAA,eAAA,CAAgB,SAAY,GAAA,IAAA,CAAA;AAE5B,YAACA,CAAAA,CAAAA,GAAAA,GAAA,IAAI,WAAJ,KAAA,IAAA,GAAAA,MAAA,GAAI,CAAA,WAAA,GAAgB,EAAI,EAAA,IAAA;AAAA,cACvB,GAAG,UAAA,CACA,MAAO,CAAA,CAAC,GAAG,CAAM,KAAA,CAAC,eAAgB,CAAA,GAAA,CAAI,CAAC,CAAC,CACxC,CAAA,GAAA,CAAI,CAAC,KAAW,MAAA;AAAA,gBACf,MAAM,KAAM,CAAA,IAAA;AAAA,gBACZ,OAAO,KAAM,CAAA,GAAA;AAAA,eACb,CAAA,CAAA;AAAA,aACN,CAAA;AAEA,YAAI,GAAA,CAAA,IAAA,CAAK,gBAAgB,cAAc,CAAA,CAAA;AAAA,WACzC;AAAA,SACF;AAAA,OACD,CAAA,CAAA;AAAA,KACI,MAAA;AACL,MAAU,SAAA,CAAA,eAAA,EAAiB,SAAS,IAAI,CAAA,CAAA;AAAA,KAC1C;AAAA,GACF;AACF,CAAA,CAAA;AAEA,MAAM,oBAAoB,CAAC;AAAA,EACzB,SAAA;AAAA,EACA,cAAA,EAAgB,EAAE,KAAM,EAAA;AAC1B,CAAoC,KAAA;AAvFpC,EAAA,IAAA,EAAA,CAAA;AAwFE,EAAA,MAAM,aAA0B,EAAC,CAAA;AACjC,EAAW,KAAA,MAAA,GAAA,IAAO,UAAU,KAAO,EAAA;AACjC,IAAM,MAAA,MAAA,GAAS,SAAU,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAClC,IAAI,IAAA,CAAC,OAAO,IAAK,CAAA,KAAA;AAAO,MAAA,SAAA;AAExB,IAAA,MAAM,IAAO,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,IAAK,CAAA,IAAA,KAAZ,IAAoB,GAAA,EAAA,GAAA,GAAA,CAAA;AACjC,IAAI,IAAA,uBAAA,CAAwB,OAAO,IAAI,CAAA;AAAG,MAAA,SAAA;AAE1C,IAAA,UAAA,CAAW,IAAK,CAAAP,eAAA,CAAAf,gBAAA,CAAA,EAAA,EACX,MAAO,CAAA,IAAA,CAAK,KADD,CAAA,EAAA;AAAA,MAEd,MAAQ,EAAA,IAAA;AAAA,KACT,CAAA,CAAA,CAAA;AAAA,GACH;AAEA,EAAI,IAAA,SAAA,CAAU,QAAS,CAAA,SAAA,CAAU,WAAa,EAAA;AAC5C,IAAA,KAAA,MAAW,UAAc,IAAA,SAAA,CAAU,QAAS,CAAA,SAAA,CAAU,WAAa,EAAA;AACjE,MAAM,MAAA,EAAE,OAAU,GAAA,UAAA,CAAA;AAClB,MAAA,IAAI,KAAO,EAAA;AACT,QAAA,UAAA,CAAW,KAAK,EAAE,GAAA,EAAK,OAAO,IAAM,EAAA,UAAA,CAAW,MAAM,CAAA,CAAA;AAAA,OACvD;AAAA,KACF;AAAA,GACF;AAEA,EAAO,OAAA,UAAA,CAAA;AACT,CAAA,CAAA;AAEA,MAAM,SAAA,GAAY,CAChB,EAAE,cAAgB,EAAA,EAAE,MAAQ,EAAA,eAAA,EAC5B,EAAA,OAAA,EACA,IACG,KAAA;AAtHL,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAuHE,EAAA,MAAM,WAAe,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,WAAL,KAAA,IAAA,GAAA,EAAA,GAAA,IAAA,CAAK,cAAgB,EAAC,CAAA;AAC3C,EAAM,MAAA,GAAA,GAAM,IAAIgB,UAAO,CAAA;AAAA,IACrB,CAAC,QAAQ,UAAU,CAAA;AAAA,GACc,CAAA,CAAA;AAEnC,EAAI,IAAA,CAAA,CAAA,EAAA,GAAA,OAAA,CAAQ,OAAR,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAiB,MAAW,MAAA,CAAA,IAAK,gBAAgB,OAAQ,CAAA,OAAA,CAAQ,CAAC,CAAC,CAAG,EAAA;AACxE,IAAA,MAAM,MAAS,GAAA,eAAA,CAAgB,OAAQ,CAAA,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AACjD,IAAO,MAAA,CAAA,IAAA,CAAK,KAAK,IAAO,GAAA,KAAA,CAAA;AACxB,IAAO,MAAA,CAAA,IAAA,CAAK,KAAK,KAAQ,GAAA;AAAA,MACvB,IAAA;AAAA,MACA,GAAA;AAAA,KACF,CAAA;AAAA,GACK,MAAA;AACL,IAAA,WAAA,CAAY,IAAK,CAAA;AAAA,MACf,IAAA;AAAA,MACA,KAAO,EAAA,GAAA;AAAA,KACR,CAAA,CAAA;AAAA,GACH;AACF,CAAA;;;;;;;;;;;;;;;;;;;;;ACjEa,MAAA,aAAA,GAAgB,OAC3B,GAAA,EACA,iBACA,EAAA,UAAA,EACA,OACA,EAAA,MAAA,EACA,WACA,EAAA,aAAA,EACA,MACA,EAAA,eAAA,EACA,SACkB,KAAA;AAClB,EAAA,MAAM,YAA4B,GAAA,mBAAA;AAAA,IAChC,MAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,GACF,CAAA;AACA,EAAA,MAAM,aAAyB,EAAE,MAAA,EAAQ,EAAI,EAAA,WAAA,EAAa,EAAG,EAAA,CAAA;AAC7D,EAAA,MAAM,mBAAsC,EAAC,CAAA;AAC7C,EAAA,MAAM,EAAE,YAAA,EAAc,kBAAoB,EAAA,UAAA,EAAY,aACpD,GAAA,0BAAA;AAAA,IACE,MAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA;AAAA,GACF,CAAA;AAEF,EAAwB,uBAAA,CAAA,kBAAA,EAAoB,eAAe,GAAG,CAAA,CAAA;AAE9D,EAAM,MAAA,yBAAA;AAAA,IACJ,WAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,GAAA;AAAA,IACA,SAAA;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,iBAAA;AAAA,IACJ,OAAA;AAAA,IACA,YAAA;AAAA,IACA,iBAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,GAAA;AAAA,IACA,aAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,gBAAA;AAAA,IACA,SAAA;AAAA,GACF,CAAA;AAEA,EAAA,kBAAA,CAAmB,MAAQ,EAAA,GAAA,EAAK,YAAc,EAAA,aAAA,EAAe,WAAW,CAAA,CAAA;AAExE,EAAA,MAAM,QAAQ,GAAI,CAAA;AAAA,IAChB,eAAA,CAAgB,YAAY,OAAO,CAAA;AAAA,IACnC,qBAAA,CAAsB,kBAAkB,OAAO,CAAA;AAAA,GAChD,CAAA,CAAA;AAED,EAAA,KAAA,MAAW,WAAW,UAAY,EAAA;AAChC,IAAI,GAAA,CAAA,IAAA;AAAA,MACFO,iBAAW,CAAA,iBAAA,EAAmB,WAAa,EAAA,OAAA,EAAS,QAAQ,UAAU,CAAA;AAAA,KACxE,CAAA;AAAA,GACF;AACF,CAAA,CAAA;AAEA,MAAM,mBAAsB,GAAA,CAC1B,MACA,EAAA,WAAA,EACA,aACgB,KAAA;AAChB,EAAA,OAAO,MAAO,CAAA,MAAA,CAAoB,CAAC,GAAA,EAAK,SAAc,KAAA;AAnJxD,IAAA,IAAA,EAAA,CAAA;AAoJI,IAAA,MAAM,WAAc,GAAA,CAAA,EAAA,GAAA,SAAA,CAAU,CAAE,CAAA,MAAA,KAAZ,IAAsB,GAAA,EAAA,GAAA,aAAA,CAAA;AAC1C,IAAM,MAAA,UAAA,GAAa,YAAY,MAAO,CAAA,IAAA;AAAA,MACpC,CAAC,CAAM,KAAA,CAAA,CAAE,SAAS,SAAU,CAAA,KAAA,IAAS,EAAE,UAAe,KAAA,WAAA;AAAA,KACxD,CAAA;AACA,IAAA,IAAI,CAAC,UAAY,EAAA;AACf,MAAA,GAAA,CAAI,KAAK,SAAS,CAAA,CAAA;AAAA,KACpB;AACA,IAAO,OAAA,GAAA,CAAA;AAAA,GACT,EAAG,EAAE,CAAA,CAAA;AACP,CAAA,CAAA;AAEA,MAAM,6BAA6B,CACjC,MAAA,EACA,QACA,WACA,EAAA,aAAA,EACA,cACA,eAMG,KAAA;AA3KL,EAAA,IAAA,EAAA,CAAA;AA4KE,EAAA,MAAM,eAAkC,EAAC,CAAA;AACzC,EAAA,MAAM,qBAA8C,EAAC,CAAA;AACrD,EAAA,MAAM,aAAkC,EAAC,CAAA;AACzC,EAAA,MAAM,cAA2B,EAAC,CAAA;AAClC,EAAA,MAAM,gBAAe,EAAiB,GAAA,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAA,MAAA,KAAjB,IAAyB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA,CAAI,CAAC,IAAS,KAAA;AAC1D,IAAA,MAAM,CAAC,MAAS,GAAA,aAAA,EAAe,KAAK,CAAA,GAAIxB,iCAA0B,IAAI,CAAA,CAAA;AACtE,IAAO,OAAA,EAAE,QAAQ,KAAM,EAAA,CAAA;AAAA,GACzB,CAAA,CAAA;AAEA,EAAW,KAAA,MAAA,OAAA,IAAW,YAAY,MAAQ,EAAA;AACxC,IAAA,IACE,OAAQ,CAAA,IAAA,KAAS,MAAO,CAAA,eAAA,KACxB,YAAc,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,YAAA,CAAA,IAAA;AAAA,MACZ,CAAC,EAAE,MAAQ,EAAA,KAAA,OACT,KAAU,KAAA,OAAA,CAAQ,IAAQ,IAAA,MAAA,KAAW,OAAQ,CAAA,UAAA;AAAA,KAAA,CAAA;AAGjD,MAAA,SAAA;AAEF,IAAA,MAAM,YAAY,MAAO,CAAA,IAAA;AAAA,MACvB,CAAC,CAAG,KAAA;AAhMV,QAAAuB,IAAAA,GAAAA,CAAAA;AAiMQ,QAAE,OAAA,CAAA,CAAA,KAAA,KAAU,OAAQ,CAAA,IAAA,IAAA,CAAA,CACnBA,GAAA,GAAA,CAAA,CAAE,EAAE,MAAJ,KAAA,IAAA,GAAAA,GAAc,GAAA,aAAA,MAAmB,OAAQ,CAAA,UAAA,CAAA;AAAA,OAAA;AAAA,KAC9C,CAAA;AACA,IAAA,IAAI,SAAW,EAAA;AACb,MAAA,cAAA;AAAA,QACE,WAAA;AAAA,QACA,YAAA;AAAA,QACA,WAAA;AAAA,QACA,aAAA;AAAA,QACA,OAAA;AAAA,QACA,SAAA;AAAA,OACF,CAAA;AACA,MAAA,SAAA;AAAA,KACF;AAEA,IAAM,MAAA,CAAA,GAAI,aAAa,SAAU,CAAA,CAAC,MAAM,CAAE,CAAA,KAAA,KAAU,QAAQ,IAAI,CAAA,CAAA;AAChE,IAAA,IAAI,MAAM,CAAI,CAAA,EAAA;AACZ,MAAME,MAAAA,UAAAA,GAAY,aAAa,CAAC,CAAA,CAAA;AAChC,MAAa,YAAA,CAAA,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA;AACxB,MAAA,kBAAA,CAAmB,IAAK,CAAA,EAAE,SAAAA,EAAAA,UAAAA,EAAW,SAAS,CAAA,CAAA;AAC9C,MAAA,SAAA;AAAA,KACF;AAEA,IAAA,UAAA,CAAW,KAAK,OAAO,CAAA,CAAA;AAAA,GACzB;AAEA,EAAA,OAAO,EAAE,YAAA,EAAc,kBAAoB,EAAA,UAAA,EAAY,WAAY,EAAA,CAAA;AACrE,CAAA,CAAA;AAEA,MAAM,uBAA0B,GAAA,CAC9B,kBACA,EAAA,aAAA,EACA,GACG,KAAA;AAlOL,EAAA,IAAA,EAAA,CAAA;AAmOE,EAAA,KAAA,MAAW,EAAE,SAAA,EAAW,OAAQ,EAAA,IAAK,kBAAoB,EAAA;AACvD,IAAA,MAAM,aAAa,OAAQ,CAAA,UAAA,CAAA;AAC3B,IAAA,MAAM,QAAW,GAAA,CAAA,EAAA,GAAA,SAAA,CAAU,CAAE,CAAA,MAAA,KAAZ,IAAsB,GAAA,EAAA,GAAA,aAAA,CAAA;AAEvC,IAAA,GAAA,CAAI,IAAK,CAAA;AAAA,MACP,IAAM,EAAA,YAAA;AAAA,MACN,IAAM,EAAA,OAAA;AAAA,MACN,UAAA;AAAA,MACA,MAAM,OAAQ,CAAA,IAAA;AAAA,MACd,QAAA;AAAA,MACA,IAAI,OAAQ,CAAA,IAAA;AAAA,KACb,CAAA,CAAA;AAAA,GACH;AACF,CAAA,CAAA;AAEA,MAAM,iBAAoB,GAAA,OACxB,OACA,EAAA,YAAA,EACA,iBACA,EAAA,WAAA,EACA,UACA,EAAA,GAAA,EACA,aACA,EAAA,MAAA,EACA,UACA,EAAA,gBAAA,EACA,SACkB,KAAA;AA9PpB,EAAA,IAAA,EAAA,CAAA;AA+PE,EAAA,MAAM,qBAA0C,EAAC,CAAA;AACjD,EAAA,MAAM,iBAAiC,EAAC,CAAA;AAExC,EAAA,KAAA,MAAW,mBAAmB,YAAc,EAAA;AAC1C,IAAA,kBAAA,CAAmB,MAAS,GAAA,CAAA,CAAA;AAE5B,IAAM,MAAA,kBAAA;AAAA,MACJ,OAAA;AAAA,MACA,iBAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA,GAAA;AAAA,MACA,aAAA;AAAA,MACA,MAAA;AAAA,MACA,eAAA;AAAA,MACA,UAAA;AAAA,MACA,kBAAA;AAAA,MACA,cAAA;AAAA,MACA,SAAA;AAAA,KACF,CAAA;AAEA,IAAA,IAAI,mBAAmB,MAAQ,EAAA;AAC7B,MAAM,MAAA,EAAE,WAAc,GAAA,eAAA,CAAA;AACtB,MAAA,MAAM,QAAkB,EAAC,CAAA;AACzB,MAAA,MAAM,QAAkB,EAAC,CAAA;AAEzB,MAAW,KAAA,MAAA,GAAA,IAAO,UAAU,KAAO,EAAA;AACjC,QAAM,MAAA,MAAA,GAAS,SAAU,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAElC,QAAA,IAAI,CAAC,MAAO,CAAA,QAAA;AAAU,UAAA,SAAA;AAEtB,QAAA,MAAM,IAAO,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,IAAK,CAAA,IAAA,KAAZ,IAAoB,GAAA,EAAA,GAAA,GAAA,CAAA;AACjC,QAAA,KAAA,CAAM,KAAK,IAAI,CAAA,CAAA;AACf,QAAA,KAAA,CAAM,IAAK,CAAA,eAAA,CAAgB,MAAQ,EAAA,aAAa,CAAC,CAAA,CAAA;AAAA,OACnD;AAEA,MAAA,MAAM,YAAY,SAAU,CAAA,KAAA,CAAA;AAC5B,MAAM,MAAA,MAAA,GAAS,YAAY,KACxB,CAAA,GAAA,CAAI,CAAC,CAAM,KAAA,CAAA,MAAA,EAAS,GAAG,CACvB,CAAA,IAAA,CAAK,IAAI,CAAQ,CAAA,IAAA,EAAA,SAAA,CAAA,EAAA,EAAc,MAC/B,GAAI,CAAA,CAAC,MAAM,CAAI,CAAA,EAAA,CAAA,CAAA,CAAA,CAAI,CACnB,CAAA,IAAA,CAAK,IAAI,CAAA,CAAA,CAAA,CAAA,CAAA;AAEZ,MAAiB,gBAAA,CAAA,IAAA;AAAA,QACf,GAAG,mBAAmB,GAAI,CAAA,CAAC,MAAOT,eAAK,CAAAf,gBAAA,CAAA,EAAA,EAAA,CAAA,CAAA,EAAL,EAAQ,MAAA,EAAS,CAAA,CAAA;AAAA,OACrD,CAAA;AAAA,KACF;AAAA,GACF;AACF,CAAA,CAAA;AAEA,MAAM,eAAA,GAAkB,OAAO,UAAA,EAAwB,OAAqB,KAAA;AAC1E,EAAI,IAAA,UAAA,CAAW,YAAY,MAAQ,EAAA;AACjC,IAAM,MAAA;AAAA,MACJ,IAAA,EAAM,CAAC,OAAO,CAAA;AAAA,KAChB,GAAI,MAAM,OAAA,CAAQ,MAAO,CAAA;AAAA,MACvB,IACE,EAAA,SAAA,GACA,UAAW,CAAA,WAAA,CACR,IAAI,CAAC,CAAA,KAAM,CAAG,EAAA,CAAA,CAAE,IAAW,CAAA,IAAA,EAAA,CAAA,CAAE,MAAS,CAAA,CAAA,CAAA,CAAA,CACtC,KAAK,IAAI,CAAA;AAAA,MACd,QAAQ,UAAW,CAAA,MAAA;AAAA,KACpB,CAAA,CAAA;AAED,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,OAAA,CAAQ,QAAQ,CAAK,EAAA,EAAA;AACvC,MAAI,IAAA,CAAC,OAAQ,CAAA,CAAC,CAAG,EAAA;AACf,QAAW,UAAA,CAAA,WAAA,CAAY,CAAC,CAAA,CAAE,MAAO,EAAA,CAAA;AAAA,OACnC;AAAA,KACF;AAAA,GACF;AACF,CAAA,CAAA;AAEA,MAAM,yBAAA,GAA4B,OAChC,WACA,EAAA,YAAA,EACA,YACA,YACA,EAAA,WAAA,EACA,aACA,EAAA,GAAA,EACA,SACG,KAAA;AA/UL,EAAA,IAAA,EAAA,CAAA;AAgVE,EAAA,KAAA,MAAW,aAAa,YAAc,EAAA;AACpC,IAAA,IAAI,WAAW,MAAQ,EAAA;AACrB,MAAA,MAAM,QAAQ,MAAM,oBAAA;AAAA,QAClB,OAAA;AAAA,QACA,SAAU,CAAA,KAAA;AAAA,QACV,UAAW,CAAA,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAAA,QAC5B,SAAA;AAAA,OACF,CAAA;AACA,MAAA,IAAI,KAAO,EAAA;AACT,QAAM,MAAA,OAAA,GAAU,UAAW,CAAA,KAAA,GAAQ,CAAC,CAAA,CAAA;AACpC,QAAW,UAAA,CAAA,MAAA,CAAO,KAAQ,GAAA,CAAA,EAAG,CAAC,CAAA,CAAA;AAE9B,QAAA,GAAA,CAAI,IAAK,CAAA;AAAA,UACP,IAAM,EAAA,YAAA;AAAA,UACN,IAAM,EAAA,OAAA;AAAA,UACN,YAAY,OAAQ,CAAA,UAAA;AAAA,UACpB,MAAM,OAAQ,CAAA,IAAA;AAAA,UACd,QAAU,EAAA,CAAA,EAAA,GAAA,SAAA,CAAU,CAAE,CAAA,MAAA,KAAZ,IAAsB,GAAA,EAAA,GAAA,aAAA;AAAA,UAChC,IAAI,SAAU,CAAA,KAAA;AAAA,SACf,CAAA,CAAA;AAED,QAAA,cAAA;AAAA,UACE,WAAA;AAAA,UACA,YAAA;AAAA,UACA,WAAA;AAAA,UACA,aAAA;AAAA,UACA,OAAA;AAAA,UACA,SAAA;AAAA,SACF,CAAA;AAEA,QAAA,SAAA;AAAA,OACF;AAAA,KACF;AAEA,IAAA,GAAA,CAAI,IAAK,CAAA,cAAA,CAAe,aAAe,EAAA,SAAS,CAAC,CAAA,CAAA;AAAA,GACnD;AACF,CAAA,CAAA;AAEA,MAAM,iBAAiB,CACrB,WAAA,EACA,cACA,WACA,EAAA,aAAA,EACA,SACA,SACG,KAAA;AA7XL,EAAA,IAAA,EAAA,CAAA;AA8XE,EAAA,MAAM,QAAQ,EAAC,CAAA;AACf,EAAA,MAAM,MAAS,GAAA,CAAA,EAAA,GAAA,SAAA,CAAU,CAAE,CAAA,MAAA,KAAZ,IAAsB,GAAA,EAAA,GAAA,aAAA,CAAA;AAErC,EAAA,YAAA,CAAa,IAAK,CAAA;AAAA,IAChB,SAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA,EAAayB,8BAAwB,CAAA,WAAA,EAAa,OAAO,CAAA;AAAA,IACzD,MAAA;AAAA,IACA,cAAgB,EAAA;AAAA,MACd,IAAM,EAAA,aAAA;AAAA,MACN,MAAA;AAAA,MACA,MAAM,SAAU,CAAA,KAAA;AAAA,MAChB,KAAA;AAAA,MACA,KAAK,EAAC;AAAA,MACN,MAAM,EAAC;AAAA,KACT;AAAA,IACA,SAAW,EAAA,KAAA;AAAA,IACX,iBAAiB,EAAC;AAAA,IAClB,YAAY,EAAC;AAAA,GACd,CAAA,CAAA;AAED,EAAA,WAAA,CAAY,CAAG,EAAA,MAAA,CAAA,CAAA,EAAU,SAAU,CAAA,KAAA,CAAA,CAAO,CAAI,GAAA,KAAA,CAAA;AAChD,CAAA,CAAA;AAEA,MAAM,cAAA,GAAiB,CACrB,aAAA,EACA,KACoB,KAAA;AACpB,EAAO,OAAAzB,gBAAA,CAAA;AAAA,IACL,IAAM,EAAA,OAAA;AAAA,IACN,MAAQ,EAAA,QAAA;AAAA,IACR,QAAQ,KAAM,CAAA,CAAA,CAAE,WAAW,aAAgB,GAAA,KAAA,CAAA,GAAY,MAAM,CAAE,CAAA,MAAA;AAAA,IAC/D,OAAA,EAAS,MAAM,QAAS,CAAA,OAAA;AAAA,IACxB,MAAM,KAAM,CAAA,KAAA;AAAA,IACZ,KAAA,EAAO,eAAe,KAAK,CAAA;AAAA,IAC3B,YAAc,EAAA,KAAA,CAAM,QAAS,CAAA,YAAA,GAAe,QAAW,GAAA,OAAA;AAAA,GAAA,EACpD,MAAM,QAAS,CAAA,SAAA,CAAA,CAAA;AAEtB,CAAA,CAAA;AAEA,MAAM,cAAA,GAAiB,CAAC,KAAmC,KAAA;AACzD,EAAA,MAAM,QAAsB,EAAC,CAAA;AAC7B,EAAW,KAAA,MAAA,GAAA,IAAO,MAAM,KAAO,EAAA;AAC7B,IAAM,MAAA,MAAA,GAAS,KAAM,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAC9B,IAAI,IAAA,EAAE,kBAAkB0B,iBAAgB,CAAA,EAAA;AACtC,MAAA,KAAA,CAAM,GAAG,CAAI,GAAA,MAAA,CAAA;AAAA,KACf;AAAA,GACF;AACA,EAAO,OAAA,KAAA,CAAA;AACT,CAAA,CAAA;AAEA,MAAM,kBAAqB,GAAA,OACzB,OACA,EAAA,iBAAA,EACA,WACA,EAAA,UAAA,EACA,GACA,EAAA,aAAA,EACA,MACA,EAAA,eAAA,EACA,UACA,EAAA,kBAAA,EACA,gBACA,SACG,KAAA;AACH,EAAM,MAAA,cAAA;AAAA,IACJ,OAAA;AAAA,IACA,MAAA;AAAA,IACA,iBAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,eAAA;AAAA,IACA,GAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA,cAAA;AAAA,IACA,SAAA;AAAA,GACF,CAAA;AAEA,EAAA,iBAAA,CAAkB,QAAQ,eAAe,CAAA,CAAA;AAEzC,EAAe,cAAA,CAAA,MAAA,EAAQ,eAAiB,EAAA,GAAA,EAAK,kBAAkB,CAAA,CAAA;AAE/D,EAAc,aAAA,CAAA,GAAA,EAAK,iBAAiB,kBAAkB,CAAA,CAAA;AAEtD,EAAM,MAAA,EAAE,gBAAmB,GAAA,eAAA,CAAA;AAC3B,EAAA,IACE,OAAO,IAAK,CAAA,cAAA,CAAe,KAAK,CAAA,CAAE,UAClC,MAAO,CAAA,IAAA,CAAK,cAAe,CAAA,GAAG,EAAE,MAChC,IAAA,MAAA,CAAO,KAAK,cAAe,CAAA,IAAI,EAAE,MACjC,EAAA;AACA,IAAA,eAAA,CAAgB,SAAY,GAAA,IAAA,CAAA;AAC5B,IAAA,GAAA,CAAI,KAAK,cAAc,CAAA,CAAA;AAAA,GACzB;AAEA,EAAI,IAAA,eAAA,CAAgB,WAAW,MAAQ,EAAA;AACrC,IAAI,GAAA,CAAA,IAAA,CAAK,GAAG,eAAA,CAAgB,UAAU,CAAA,CAAA;AAAA,GACxC;AACF,CAAA;;ACxcO,MAAM,gBAAmB,GAAA,OAC9B,OACA,EAAA,MAAA,EACA,KACA,WACA,EAAA;AAAA,EACE,iBAAA;AAAA,EACA,SAAW,EAAA,EAAE,OAAS,EAAA,KAAA,EAAO,QAAQ,OAAQ,EAAA;AAAA,EAC7C,aAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AACF,CACgC,KAAA;AAChC,EAAM,MAAA,UAAA,GAAaC,qBAAe,CAAA,iBAAA,EAAmB,WAAW,CAAA,CAAA;AAEhE,EAAA,MAAM,cAAe,CAAA,GAAA,EAAK,OAAS,EAAA,WAAA,EAAa,SAAS,CAAA,CAAA;AACzD,EAAA,iBAAA,CAAkB,GAAK,EAAA,WAAA,EAAa,aAAe,EAAA,QAAA,CAAS,UAAU,CAAA,CAAA;AACtE,EAAM,MAAA,cAAA;AAAA,IACJ,GAAA;AAAA,IACA,OAAA;AAAA,IACA,iBAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,OAAA;AAAA,GACF,CAAA;AACA,EAAA,MAAM,YAAa,CAAA,GAAA,EAAK,KAAO,EAAA,WAAA,EAAa,eAAe,SAAS,CAAA,CAAA;AACpE,EAAM,MAAA,aAAA;AAAA,IACJ,GAAA;AAAA,IACA,iBAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAS,CAAA,eAAA;AAAA,IACT,SAAA;AAAA,GACF,CAAA;AAEA,EAAO,OAAAC,qBAAA,CAAe,aAAe,EAAA,MAAA,EAAQ,GAAG,CAAA,CAAA;AAClD,CAAA;;ACtDO,MAAM,eAAkB,GAAA,OAC7B,OACA,EAAA,MAAA,EACA,eACA,uBACwC,KAAA;AACxC,EAAA,MAAM,WAAc,GAAA,IAAI,QAAS,CAAA,QAAA,EAAU,aAAa,CAAA,CAAA;AAExD,EAAA,OAAO,OAAQ,CAAA,WAAA;AAAA,IACb,EAAE,MAAM,OAAQ,EAAA;AAAA,IAChB,OAAO,GAAQ,KAAA;AACb,MAAA,MAAM,YAAuC,EAAC,CAAA;AAC9C,MAAA,WAAA,CAAY,CAAC,QAAsC,KAAA;AACjD,QAAA,SAAA,CAAU,KAAK,QAAQ,CAAA,CAAA;AAAA,OACxB,CAAA,CAAA;AAED,MAAM,MAAA,EAAE,KAAQ,GAAA,MAAA,CAAA;AAChB,MAAA,MAAA,CAAO,GAAM,GAAA,KAAA,CAAA;AAEb,MAAA,MAAM,EAAK,GAAAC,+BAAA;AAAA,QACT,GAAA;AAAA,QACA,IAAA;AAAA,QACA,MAAA;AAAA,OACF,CAAA;AAEA,MAAA,MAAA,CAAO,GAAM,GAAA,GAAA,CAAA;AAEb,MAAA,KAAA,MAAW,YAAY,SAAW,EAAA;AAChC,QAAM,MAAA,QAAA,CAAS,IAAI,IAAI,CAAA,CAAA;AAAA,OACzB;AAEA,MAAM,MAAA,WAAA,GAAc,MAAMC,yBAAA,CAAmB,GAAG,CAAA,CAAA;AAChD,MAAA,uBAAA,CAAwB,SAAY,GAAA,IAAA,CAAA;AACpC,MAAI,IAAA,IAAA,CAAA;AACJ,MAAI,IAAA;AACF,QAAA,IAAA,GAAO,MAAM,gBAAA;AAAA,UACX,OAAA;AAAA,UACA,MAAA;AAAA,UACA,EAAC;AAAA,UACD,WAAA;AAAA,UACA,uBAAA;AAAA,SACF,CAAA;AAAA,eACO,GAAP,EAAA;AACA,QAAA,IAAI,eAAe,WAAa,EAAA;AAC9B,UAAO,OAAA,KAAA,CAAA;AAAA,SACT;AACA,QAAM,MAAA,GAAA,CAAA;AAAA,OACR;AAEA,MAAO,OAAA,IAAA,CAAA;AAAA,KACT;AAAA,IACA,EAAE,MAAM,UAAW,EAAA;AAAA,GACrB,CAAA;AACF,CAAA;;AC9CO,MAAM,MAAS,GAAA,CACpB,GACA,EAAA,MAAA,EACA,aACG,KAAA;AAtBL,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAuBE,EAAA,IAAI,CAAC,MAAO,CAAA,MAAA;AAAQ,IAAA,OAAA;AAEpB,EAAA,MAAM,OAAe,EAAC,CAAA;AAEtB,EAAI,IAAA,KAAA,EAAO,KAAK,MAAQ,EAAA,IAAA,CAAA;AACxB,EAAA,IAAI,OAAO,MAAO,CAAA,GAAA,KAAQ,YAAY,MAAO,CAAA,GAAA,CAAI,WAAW,KAAO,EAAA;AACjE,IAAA,KAAA,GAAQ,GAAM,GAAA,MAAA,GAAS,IAAO,GAAA,CAAC,CAAc,KAAA,CAAA,CAAA;AAAA,GACxC,MAAA;AACL,IAAA,CAAC,EAAE,KAAA,EAAO,GAAK,EAAA,MAAA,EAAQ,MAAS,GAAAjC,aAAA,EAAA;AAAA,GAClC;AAEA,EAAA,KAAA,MAAW,KAAK,GAAK,EAAA;AACnB,IAAA,QAAQ,EAAE,IAAM;AAAA,MACd,KAAK,OAAS,EAAA;AACZ,QAAI,IAAA,aAAA,GAAgB,CAAC,CAAC,CAAE,CAAA,UAAA,CAAA;AACxB,QAAA,MAAM,QAAW,GAAA;AAAA,UACf,MAAQ,EAAA,CAAA;AAAA,UACR,KAAO,EAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,CAAE,OAAF,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAW,WAAX,IAAqB,GAAA,EAAA,GAAA,CAAA;AAAA,UAC5B,aAAA,EAAA,CACE,EAAE,GAAA,CAAA,EAAA,GAAA,CAAA,CAAA,WAAA,KAAF,IAAe,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAA;AAAA,YACb,CAAC,GAAK,EAAA,CAAA,KAAO,CAAE,CAAA,UAAA,GAAa,MAAM,CAAI,GAAA,GAAA;AAAA,YACtC,CAAA;AAAA,WAAA,KAFF,IAGK,GAAA,EAAA,GAAA,CAAA;AAAA,UACP,KAAA,EAAA,CACE,EAAE,GAAA,CAAA,EAAA,GAAA,CAAA,CAAA,WAAA,KAAF,IAAe,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAA;AAAA,YACb,CAAC,GAAK,EAAA,CAAA,KAAO,CAAE,CAAA,KAAA,GAAQ,MAAM,CAAI,GAAA,GAAA;AAAA,YACjC,CAAA;AAAA,WAAA,KAFF,IAGK,GAAA,EAAA,GAAA,CAAA;AAAA,SACT,CAAA;AACA,QAAW,KAAA,MAAA,GAAA,IAAO,EAAE,KAAO,EAAA;AACzB,UAAS,QAAA,CAAA,MAAA,EAAA,CAAA;AAET,UAAM,MAAA,MAAA,GAAS,CAAE,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAC1B,UAAI,IAAA,MAAA,CAAO,KAAK,UAAY,EAAA;AAC1B,YAAgB,aAAA,GAAA,IAAA,CAAA;AAAA,WAClB;AAEA,UAAI,IAAA,MAAA,CAAO,KAAK,OAAS,EAAA;AACvB,YAAS,QAAA,CAAA,KAAA,IAAS,MAAO,CAAA,IAAA,CAAK,OAAQ,CAAA,MAAA,CAAA;AAAA,WACxC;AAEA,UAAI,IAAA,MAAA,CAAO,KAAK,WAAa,EAAA;AAC3B,YAAA,QAAA,CAAS,aAAa,CAAA,IAAK,MAAO,CAAA,IAAA,CAAK,WAAY,CAAA,MAAA,CAAA;AAAA,WACrD;AAEA,UAAI,IAAA,MAAA,CAAO,KAAK,KAAO,EAAA;AACrB,YAAS,QAAA,CAAA,KAAA,EAAA,CAAA;AAAA,WACX;AAAA,SACF;AAEA,QAAA,MAAM,UAAoB,EAAC,CAAA;AAE3B,QAAA,KAAA,MAAW,OAAO,QAAU,EAAA;AAC1B,UAAM,MAAA,KAAA,GAAQ,SAAS,GAA4B,CAAA,CAAA;AACnD,UAAI,IAAA,KAAA,IAAS,QAAQ,QAAU,EAAA;AAC7B,YAAQ,OAAA,CAAA,IAAA;AAAA,cACN,CAAA,EAAG,SAASkC,gBAAU,CAAA,GAAA,EAAK,OAAO,GAAQ,KAAA,OAAA,GAAU,OAAO,GAAG,CAAA,CAAA,CAAA;AAAA,aAChE,CAAA;AAAA,WACF;AAAA,SACF;AAEA,QAAA,IAAI,CAAC,aAAe,EAAA;AAClB,UAAA,OAAA,CAAQ,KAAK,gBAAgB,CAAA,CAAA;AAAA,SAC/B;AAEA,QAAK,IAAA,CAAA,IAAA;AAAA,UACH,GACE,CAAE,CAAA,MAAA,KAAW,QACT,GAAA,KAAA,CAAM,gBAAgB,CACtB,GAAA,GAAA,CAAI,cAAc,CAAA,CAAA,CAAA,EACpB,WAAW,CAAG,EAAA,aAAa,CAAM,CAAA,EAAA,EAAA,OAAA,CAAQ,KAAK,IAAI,CAAA,CAAA,CAAA,CAAA;AAAA,SACxD,CAAA;AACA,QAAA,MAAA;AAAA,OACF;AAAA,MACA,KAAK,aAAe,EAAA;AAClB,QAAA,MAAM,QAAgB,EAAC,CAAA;AAEvB,QAAA,MAAM,SAA6B,GAAA;AAAA,UACjC,CAAG,EAAA,GAAA;AAAA,UACH,OAAO,CAAE,CAAA,IAAA;AAAA,UACT,SAAW,EAAA,IAAA;AAAA,UACX,WAAW,MAAO,CAAA,SAAA;AAAA,SACpB,CAAA;AAEA,QAAW,KAAA,MAAA,GAAA,IAAO,EAAE,KAAO,EAAA;AACzB,UAAA,MAAM,OAAU,GAAAb,kBAAA,CAAQ,CAAE,CAAA,KAAA,CAAM,GAAG,CAAC,CAAA,CAAA;AACpC,UAAA,KAAA,MAAW,UAAU,OAAS,EAAA;AAC5B,YAAA,IAAI,MAAO,CAAA,IAAA,KAAS,KAAS,IAAA,MAAA,CAAO,SAAS,MAAQ,EAAA;AACnD,cAAA,MAAM,SAAS,MAAO,CAAA,IAAA,CAAA;AACtB,cAAA,MAAM,EAAE,UAAY,EAAA,OAAA,EAAS,WAAa,EAAA,KAAA,KAAU,MAAO,CAAA,IAAA,CAAA;AAE3D,cAAM,KAAA,CAAA,IAAA;AAAA,gBACJ,CACE,EAAA,MAAA,CAAO,IAAS,KAAA,KAAA,GACZ,MAAM,cAAc,CAAA,GACpB,GAAI,CAAA,eAAe,CACrB,CAAA,CAAA,EAAA,GAAA,CAAA,CAAA,EAAA,CACF,EAAO,GAAA,MAAA,CAAA,IAAA,CAAK,UAAZ,IAAqB,GAAA,EAAA,GAAA,eAAA,CAAgB,MAAQ,EAAA,aAAa,CACzD,CAAA,EAAA,MAAA,CAAO,IAAK,CAAA,UAAA,GAAa,cAAc,EACxC,CAAA,EAAA,UAAA,GAAa,cAAiB,GAAA,EAAA,CAAA,EAE9B,WACI,GAAA,CAAA,YAAA,EAAe,WACZ,CAAA,GAAA,CAAI,CAAC,EAAO,KAAA;AACX,kBAAA,OAAO,CAAG,EAAA,iBAAA;AAAA,oBACR,EAAG,CAAA,SAAA;AAAA,mBACA,CAAA,CAAA,EAAA,EAAA,CAAG,cAAe,CAAA,IAAA,CAAK,IAAI,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,iBACjC,CACA,CAAA,IAAA,CAAK,IAAI,CAAA,CAAA,CAAA,GACZ,EAEJ,CAAA,EAAA,CAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAS,MACL,IAAA,OAAA,CAAQ,MAAW,KAAA,CAAA,GACjB,aACA,GAAA,CAAA,MAAA,EAAS,QAAQ,MACnB,CAAA,QAAA,CAAA,GAAA,EAAA,CAAA,EACH,KAAQ,GAAA,CAAA,SAAA,EAAY,KAAM,CAAA,GAAA,CAAI,KAAM,CAAA,EAAE,MAAQ,EAAA,EAAG,EAAC,CAAM,CAAA,CAAA,GAAA,EAAA,CAAA,CAAA;AAAA,eAC7D,CAAA;AAAA,aACF,MAAA,IAAW,MAAO,CAAA,IAAA,KAAS,QAAU,EAAA;AACnC,cAAA,MAAM,QAAO,EAAO,GAAA,CAAA,EAAA,GAAA,MAAA,CAAA,IAAA,CAAK,WAAZ,IAAoB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAK,SAAzB,IAAiC,GAAA,EAAA,GAAA,GAAA,CAAA;AAC9C,cAAA,MAAMc,WAAkB,EAAC,CAAA;AACzB,cAAA,KAAA,CAAM,KAAK,CAAG,EAAA,MAAA,CAAO,iBAAiB,CAAA,CAAA,CAAA,EAAK,SAASA,QAAO,CAAA,CAAA;AAC3D,cAAAA,QAAQ,CAAA,IAAA,CAAK,CAAG,EAAA,MAAA,CAAO,MAAM,CAAK,CAAA,EAAA,CAAA,CAAA,CAAA;AAElC,cAAA,MAAM,WAAW,MAAO,CAAA,IAAA,CAAK,MAAQ,CAAA,MAAA,CAAO,WAAW,GAAG,CAAA,CAAA;AAC1D,cAAA,KAAA,MAAWC,SAAQ,QAAU,EAAA;AAC3B,gBAAAC,kBAAA,CAAQF,UAASC,KAAI,CAAA,CAAA;AAAA,eACvB;AAEA,cAAAD,QAAQ,CAAA,IAAA,CAAK,CAAK,EAAA,EAAA,MAAA,CAAO,IAAI,CAAK,CAAA,EAAA,CAAA,CAAA,CAAA;AAElC,cAAA,MAAM,SAAS,MAAO,CAAA,EAAA,CAAG,MAAQ,CAAA,MAAA,CAAO,WAAW,GAAG,CAAA,CAAA;AACtD,cAAA,KAAA,MAAWC,SAAQ,MAAQ,EAAA;AACzB,gBAAAC,kBAAA,CAAQF,UAASC,KAAI,CAAA,CAAA;AAAA,eACvB;AAAA,aACF,MAAA,IAAW,MAAO,CAAA,IAAA,KAAS,QAAU,EAAA;AACnC,cAAM,KAAA,CAAA,IAAA;AAAA,gBACJ,CAAA,EAAG,OAAO,iBAAiB,CAAA,CAAA,CAAA,EAAK,OAAO,MAAO,CAAA,IAAI,KAChD,MAAO,CAAA,IAAA,CAAA,CAAA;AAAA,eAEX,CAAA;AAAA,aACK,MAAA;AACL,cAAAE,iBAAA,CAAW,OAAO,IAAI,CAAA,CAAA;AAAA,aACxB;AAAA,WACF;AAAA,SACF;AAEA,QAAI,IAAA,CAAA,CAAE,KAAK,UAAY,EAAA;AACrB,UAAM,KAAA,CAAA,IAAA;AAAA,YACJ,GAAG,GAAI,CAAA,CAAA,kBAAA,CAAoB,SAAS,CAAE,CAAA,IAAA,CAAK,WAAW,OAAQ,CAAA,IAAA;AAAA,cAC5D,IAAA;AAAA,aACF,CAAA,CAAA,CAAA;AAAA,WACF,CAAA;AAAA,SACF;AAEA,QAAI,IAAA,CAAA,CAAE,KAAK,OAAS,EAAA;AAClB,UAAW,KAAA,MAAA,KAAA,IAAS,CAAE,CAAA,IAAA,CAAK,OAAS,EAAA;AAClC,YAAM,KAAA,CAAA,IAAA;AAAA,cACJ,CAAG,EAAA,GAAA;AAAA,gBACD,CAAS,MAAA,EAAA,KAAA,CAAM,OAAQ,CAAA,MAAA,GAAS,SAAY,GAAA,EAAA,CAAA,MAAA,CAAA;AAAA,eACrC,CAAA,KAAA,EAAA,KAAA,CAAM,OACZ,CAAA,GAAA,CAAI,CAAC,CAAO,KAAA,QAAA,IAAY,CAAI,GAAA,CAAA,CAAE,MAAS,GAAA,CAAA,CAAE,UAAW,CAAA,CACpD,KAAK,IAAI,CAAA,CAAA,CAAA,CAAA;AAAA,aACd,CAAA;AAAA,WACF;AAAA,SACF;AAEA,QAAI,IAAA,CAAA,CAAE,KAAK,WAAa,EAAA;AACtB,UAAA,KAAA,MAAW,EAAE,UAAA,EAAgB,IAAA,CAAA,CAAE,KAAK,WAAa,EAAA;AAC/C,YAAA,IAAI,CAAC,UAAA;AAAY,cAAA,SAAA;AAEjB,YAAM,MAAA,CAAC,MAAQ,EAAA,IAAI,CAAI,GAAApC,gCAAA;AAAA,cACrB,UAAW,CAAA,SAAA;AAAA,aACb,CAAA;AAEA,YAAM,KAAA,CAAA,IAAA;AAAA,cACJ,CAAG,EAAA,GAAA,CAAI,CAAoB,kBAAA,CAAA,CAAA,CAAA,KAAA,EAAS,WAAW,OAAQ,CAAA,IAAA;AAAA,gBACrD,IAAA;AAAA,eACO,CAAA,KAAA,EAAA,UAAA;AAAA,gBACP;AAAA,kBACE,MAAA;AAAA,kBACA,IAAA;AAAA,iBACF;AAAA,gBACA,aAAA;AAAA,eACG,CAAA,CAAA,EAAA,UAAA,CAAW,cAAe,CAAA,IAAA,CAAK,IAAI,CAAA,CAAA,CAAA,CAAA;AAAA,aAC1C,CAAA;AAAA,WACF;AAEA,UAAA,KAAA,MAAW,EAAE,KAAA,EAAW,IAAA,CAAA,CAAE,KAAK,WAAa,EAAA;AAC1C,YAAA,IAAI,CAAC,KAAA;AAAO,cAAA,SAAA;AAEZ,YAAA,KAAA,CAAM,IAAK,CAAA,CAAA,EAAG,GAAI,CAAA,CAAA,YAAA,CAAc,CAAK,CAAA,CAAA,EAAA,KAAA,CAAM,KAAM,CAAA,EAAE,MAAQ,EAAA,EAAG,EAAC,CAAG,CAAA,CAAA,CAAA,CAAA;AAAA,WACpE;AAAA,SACF;AAEA,QAAI,IAAA,CAAA,CAAE,IAAI,UAAY,EAAA;AACpB,UAAM,KAAA,CAAA,IAAA;AAAA,YACJ,GAAG,KAAM,CAAA,CAAA,iBAAA,CAAmB,SAAS,CAAE,CAAA,GAAA,CAAI,WAAW,OAAQ,CAAA,IAAA;AAAA,cAC5D,IAAA;AAAA,aACF,CAAA,CAAA,CAAA;AAAA,WACF,CAAA;AAAA,SACF;AAEA,QAAI,IAAA,CAAA,CAAE,IAAI,OAAS,EAAA;AACjB,UAAW,KAAA,MAAA,KAAA,IAAS,CAAE,CAAA,GAAA,CAAI,OAAS,EAAA;AACjC,YAAM,KAAA,CAAA,IAAA;AAAA,cACJ,CAAG,EAAA,KAAA;AAAA,gBACD,CAAQ,KAAA,EAAA,KAAA,CAAM,OAAQ,CAAA,MAAA,GAAS,SAAY,GAAA,EAAA,CAAA,MAAA,CAAA;AAAA,eACpC,CAAA,KAAA,EAAA,KAAA,CAAM,OACZ,CAAA,GAAA,CAAI,CAAC,CAAO,KAAA,QAAA,IAAY,CAAI,GAAA,CAAA,CAAE,MAAS,GAAA,CAAA,CAAE,UAAW,CAAA,CACpD,KAAK,IAAI,CAAA,CAAA,CAAA,CAAA;AAAA,aACd,CAAA;AAAA,WACF;AAAA,SACF;AAEA,QAAI,IAAA,CAAA,CAAE,IAAI,WAAa,EAAA;AACrB,UAAA,KAAA,MAAW,EAAE,UAAA,EAAgB,IAAA,CAAA,CAAE,IAAI,WAAa,EAAA;AAC9C,YAAA,IAAI,CAAC,UAAA;AAAY,cAAA,SAAA;AAEjB,YAAM,KAAA,CAAA,IAAA;AAAA,cACJ,CAAG,EAAA,KAAA,CAAM,CAAmB,iBAAA,CAAA,CAAA,CAAA,KAAA,EAAS,WAAW,OAAQ,CAAA,IAAA;AAAA,gBACtD,IAAA;AAAA,uBAEA,UAAW,CAAA,SAAA,CAAA,CAAA,EACT,UAAW,CAAA,cAAA,CAAe,KAAK,IAAI,CAAA,CAAA,CAAA,CAAA;AAAA,aACzC,CAAA;AAAA,WACF;AAEA,UAAA,KAAA,MAAW,EAAE,KAAA,EAAW,IAAA,CAAA,CAAE,IAAI,WAAa,EAAA;AACzC,YAAA,IAAI,CAAC,KAAA;AAAO,cAAA,SAAA;AAEZ,YAAM,KAAA,CAAA,IAAA;AAAA,cACJ,CAAA,EAAG,KAAM,CAAA,CAAA,WAAA,CAAa,CAAK,CAAA,CAAA,EAAA,KAAA,CAAM,MAAM,EAAE,MAAA,EAAQ,EAAC,EAAG,CAAA,CAAA,CAAA;AAAA,aACvD,CAAA;AAAA,WACF;AAAA,SACF;AAEA,QAAK,IAAA,CAAA,IAAA;AAAA,UACH,CAAA,EAAG,MAAO,CAAA,gBAAgB,CAAK,CAAA,CAAA,EAAA,UAAA,CAAW,GAAG,aAAa,CAAA,CAAA,EACxD,KAAM,CAAA,MAAA,GAAS,GAAM,GAAA,EAAA,CAAA,CAAA;AAAA,SAEzB,CAAA;AAEA,QAAA,IAAI,MAAM,MAAQ,EAAA;AAChB,UAAA,IAAA,CAAK,KAAK,KAAK,CAAA,CAAA;AAAA,SACjB;AAEA,QAAA,MAAA;AAAA,OACF;AAAA,MACA,KAAK,QAAU,EAAA;AACb,QAAK,IAAA,CAAA,IAAA;AAAA,UACH,CAAA,EACE,CAAE,CAAA,MAAA,KAAW,QACT,GAAA,KAAA,CAAM,iBAAiB,CACvB,GAAA,GAAA,CAAI,eAAe,CAAA,CAAA,CAAA,EACrB,CAAE,CAAA,IAAA,CAAA,CAAA;AAAA,SACR,CAAA;AACA,QAAA,MAAA;AAAA,OACF;AAAA,MACA,KAAK,cAAgB,EAAA;AACnB,QAAK,IAAA,CAAA,IAAA;AAAA,UACH,CAAA,EAAG,OAAO,iBAAiB,CAAA,CAAA,CAAA,EAAK,EAAE,IAAQ,CAAA,CAAA,EAAA,MAAA,CAAO,IAAI,CAAA,CAAA,CAAA,EAAK,CAAE,CAAA,EAAA,CAAA,CAAA;AAAA,SAC9D,CAAA;AACA,QAAA,MAAA;AAAA,OACF;AAAA,MACA,KAAK,YAAc,EAAA;AACjB,QAAK,IAAA,CAAA,IAAA;AAAA,UACH,CAAG,EAAA,MAAA;AAAA,YACD,CACE,EAAA,EAAA,CAAA,CAAE,UAAe,KAAA,CAAA,CAAE,WACf,CAAE,CAAA,IAAA,KAAS,CAAE,CAAA,EAAA,GACX,0BACA,GAAA,kBAAA,GACF,QACF,CAAA,CAAA,EAAA,CAAA,CAAE,KAAK,WAAY,EAAA,CAAA,CAAA;AAAA,WACpB,CAAA,CAAA,EAAA,UAAA;AAAA,YACH;AAAA,cACE,QAAQ,CAAE,CAAA,UAAA;AAAA,cACV,MAAM,CAAE,CAAA,IAAA;AAAA,aACV;AAAA,YACA,aAAA;AAAA,WACF,CAAA,CAAA,EAAK,MAAO,CAAA,IAAI,CAAK,CAAA,CAAA,EAAA,UAAA;AAAA,YACnB;AAAA,cACE,QAAQ,CAAE,CAAA,QAAA;AAAA,cACV,MAAM,CAAE,CAAA,EAAA;AAAA,aACV;AAAA,YACA,aAAA;AAAA,WACF,CAAA,CAAA;AAAA,SACF,CAAA;AACA,QAAA,MAAA;AAAA,OACF;AAAA,MACA,KAAK,WAAa,EAAA;AAChB,QAAK,IAAA,CAAA,IAAA;AAAA,UACH,CAAA,EACE,EAAE,MAAW,KAAA,QAAA,GACT,MAAM,oBAAoB,CAAA,GAC1B,IAAI,kBAAkB,CAAA,CAAA,CAAA,EACxB,WAAW,CAAG,EAAA,aAAa,IAC7B,CAAE,CAAA,OAAA,GAAU,IAAI,IAAK,CAAA,CAAA,CAAE,OAAO,CAAM,CAAA,CAAA,GAAA,EAAA,CAAA,CAAA;AAAA,SAExC,CAAA;AACA,QAAA,MAAA;AAAA,OACF;AAAA,MACA,KAAK,MAAQ,EAAA;AACX,QAAK,IAAA,CAAA,IAAA;AAAA,UACH,GACE,CAAE,CAAA,MAAA,KAAW,QAAW,GAAA,KAAA,CAAM,eAAe,CAAI,GAAA,GAAA,CAAI,aAAa,CAAA,CAAA,CAAA,EAChE,WAAW,CAAG,EAAA,aAAa,OAAO,CAAE,CAAA,MAAA,CAAO,KAAK,IAAI,CAAA,CAAA,CAAA,CAAA;AAAA,SAC1D,CAAA;AACA,QAAA,MAAA;AAAA,OACF;AAAA,MACA,KAAK,YAAc,EAAA;AACjB,QAAK,IAAA,CAAA,IAAA;AAAA,UACH,GACE,CAAE,CAAA,MAAA,KAAW,KACT,GAAA,KAAA,CAAM,sBAAsB,CAC5B,GAAA,GAAA,CAAI,2BAA2B,CAAA,CAAA,CAAA,EACjC,WAAW,CAAG,EAAA,aAAa,MAAM,CAAE,CAAA,MAAA,CAAO,KAAK,IAAI,CAAA,CAAA,CAAA;AAAA,SACzD,CAAA;AACA,QAAA,MAAA;AAAA,OACF;AAAA,MACA,KAAK,kBAAoB,EAAA;AACvB,QAAA,IAAI,EAAE,UAAY,EAAA;AAChB,UAAK,IAAA,CAAA,IAAA;AAAA,YACH,CAAA,EAAG,GAAI,CAAA,2BAA2B,CAAK,CAAA,CAAA,EAAA,UAAA;AAAA,cACrC,CAAA;AAAA,cACA,aAAA;AAAA,aACI,CAAA,EAAA,EAAA,CAAA,CAAE,UAAW,CAAA,IAAA,CAAK,IAAI,CAAA,CAAA,CAAA;AAAA,WAC9B,CAAA;AAAA,SACF;AACA,QAAA,IAAI,EAAE,QAAU,EAAA;AACd,UAAK,IAAA,CAAA,IAAA;AAAA,YACH,CAAA,EAAG,KAAM,CAAA,sBAAsB,CAAK,CAAA,CAAA,EAAA,UAAA;AAAA,cAClC,CAAA;AAAA,cACA,aAAA;AAAA,aACI,CAAA,EAAA,EAAA,CAAA,CAAE,QAAS,CAAA,IAAA,CAAK,IAAI,CAAA,CAAA,CAAA;AAAA,WAC5B,CAAA;AAAA,SACF;AACA,QAAA,MAAA;AAAA,OACF;AAAA,MACA,KAAK,QAAU,EAAA;AACb,QAAK,IAAA,CAAA,IAAA;AAAA,UACH,CACE,EAAA,CAAA,CAAE,MAAW,KAAA,QAAA,GACT,KAAM,CAAA,iBAAiB,CACvB,GAAA,GAAA,CAAI,eAAe,CAAA,CAAA,CAAA,EACrB,UAAW,CAAA,CAAA,EAAG,aAAa,CAAA,CAAA,CAAA;AAAA,SACjC,CAAA;AACA,QAAA,MAAA;AAAA,OACF;AAAA,MACA,KAAK,MAAA,CAAA;AAAA,MACL,KAAK,WAAA,CAAA;AAAA,MACL,KAAK,kBAAA,CAAA;AAAA,MACL,KAAK,YAAA;AACH,QAAA,MAAA;AAAA,MACF,KAAK,iBAAmB,EAAA;AACtB,QAAK,IAAA,CAAA,IAAA;AAAA,UACH,GAAG,MAAO,CAAA,CAAA,SAAA,EAAY,EAAE,IAAK,CAAA,WAAA,IAAe,CAAc,CAAA,UAAA,EAAA,UAAA;AAAA,YACxD,EAAE,MAAQ,EAAA,CAAA,CAAE,WAAa,EAAA,IAAA,EAAM,EAAE,SAAU,EAAA;AAAA,YAC3C,aAAA;AAAA,gBACI,CAAE,CAAA,IAAA,CAAA,CAAA,EAAQ,MAAO,CAAA,IAAI,KAAK,CAAE,CAAA,EAAA,CAAA,CAAA;AAAA,SACpC,CAAA;AACA,QAAA,MAAA;AAAA,OACF;AAAA,MACA;AACE,QAAAoC,iBAAA,CAAW,CAAC,CAAA,CAAA;AAAA,KAChB;AAAA,GACF;AAEA,EAAA,MAAM,MAAS,GAAAC,uBAAA,CAAa,IAAM,EAAA,EAAA,EAAI,IAAI,CAAA,CAAA;AAC1C,EAAO,MAAA,CAAA,MAAA,CAAO,IAAI,MAAM,CAAA,CAAA;AAC1B,CAAA,CAAA;AAEA,MAAM,aAAa,CACjB,EAAE,MAAQ,EAAA,IAAA,IACV,aACG,KAAA;AACH,EAAA,OAAO,MAAU,IAAA,MAAA,KAAW,aAAgB,GAAA,CAAA,EAAG,UAAU,IAAS,CAAA,CAAA,GAAA,IAAA,CAAA;AACpE,CAAA;;;;;;;;;;;;;;;;;;;;;ACxVO,MAAM,oBAAoB,KAAM,CAAA;AAAC,CAAA;AAEjC,MAAM,QAAW,GAAA,OACtB,OACA,EAAA,MAAA,EACA,MACA,SACkB,KAAA;AAhEpB,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAiEE,EAAI,IAAA,EAAE,QAAW,GAAA,MAAA,CAAA;AACjB,EAAI,IAAA,CAAC,MAAU,IAAA,CAAC,MAAO,CAAA,SAAA;AAAW,IAAA,MAAM,cAAc,MAAM,CAAA,CAAA;AAC5D,EAAA,IAAI,CAAC,OAAQ,CAAA,MAAA;AAAQ,IAAM,MAAA,IAAI,MAAM,CAAoC,kCAAA,CAAA,CAAA,CAAA;AAEzE,EAAI,IAAA,CAAC,MAAO,CAAA,QAAA,CAAS,KAAK,CAAA;AAAG,IAAU,MAAA,IAAA,KAAA,CAAA;AAEvC,EAAA,IAAI,aAAgB,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,CAAC,CAAA,KAAN,IAAW,GAAA,EAAA,GAAA,WAAA,CAAA;AAC/B,EAAI,IAAA,EAAA,CAAA;AACJ,EAAA,IAAI,kBAAkB,IAAM,EAAA;AAC1B,IAAK,EAAA,GAAA,IAAA,CAAA;AACL,IAAgB,aAAA,GAAA,WAAA,CAAA;AAAA,GACX,MAAA;AACL,IAAK,EAAA,GAAA,IAAA,CAAK,CAAC,CAAM,KAAA,IAAA,CAAA;AAAA,GACnB;AAEA,EAAA,MAAM,EAAE,WAAA,EAAa,QAAS,EAAA,GAAI,MAAM,wBAAA;AAAA,IACtC,OAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,CAAC,OAAO,CAAI,GAAA,QAAA,CAAA;AAClB,EAAM,MAAA,aAAA,GAAA,CAAgB,EAAQ,GAAA,OAAA,CAAA,MAAA,KAAR,IAAkB,GAAA,EAAA,GAAA,QAAA,CAAA;AAExC,EAAA,MAAM,EAAK,GAAA,MAAM,eAAgB,CAAA,MAAA,EAAQ,MAAM,CAAA,CAAA;AAC/C,EAAA,MAAM,EAAE,WAAA,EAAa,QAAS,EAAA,GAAI,EAAG,CAAA,aAAA,CAAA;AAErC,EAAA,MAAM,YAAY,MAAM,cAAA;AAAA,IACtB,EAAA;AAAA,IACA,aAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,iBAAA,GAAoBC,4BAAsB,CAAA,MAAA,EAAQ,aAAa,CAAA,CAAA;AAErE,EAAA,MAAM,uBAAkD,GAAA;AAAA,IACtD,iBAAA;AAAA,IACA,SAAA;AAAA,IACA,aAAA;AAAA,IACA,QAAA;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,MAAmB,EAAC,CAAA;AAE1B,EAAI,IAAA,aAAA,CAAA;AACJ,EAAI,IAAA;AACF,IAAA,aAAA,GAAgB,MAAM,gBAAA;AAAA,MACpB,OAAA;AAAA,MACA,MAAA;AAAA,MACA,GAAA;AAAA,MACA,WAAA;AAAA,MACA,uBAAA;AAAA,KACF,CAAA;AAAA,WAEO,GAAP,EAAA;AACA,IAAA,IAAI,eAAe,WAAa,EAAA;AAC9B,MAAA,MAAM,cAAc,QAAQ,CAAA,CAAA;AAC5B,MAAA,OAAA;AAAA,KACF;AACA,IAAM,MAAA,GAAA,CAAA;AAAA,GACR;AAEA,EAAI,IAAA,aAAA,IAAiB,CAAC,SAAW,EAAA;AAC/B,IAAA,MAAM,SAAS,MAAM,eAAA;AAAA,MACnB,OAAA;AAAA,MACA,MAAA;AAAA,MACA,aAAA;AAAA,MACA,uBAAA;AAAA,KACF,CAAA;AAEA,IAAA,IAAI,WAAW,KAAW,CAAA,EAAA;AACxB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA;AAAA,EAAwK,aAAA,CAAA,EACtK,MAAW,KAAA,KAAA,GAAQ,EAAK,GAAA,CAAA;AAAA;AAAA,EAAsB,MAAA,CAAA,CAAA,CAAA,CAAA;AAAA,OAElD,CAAA;AAAA,KACF;AAAA,GACF;AAEA,EAAM,MAAA,EAAE,QAAW,GAAA,MAAA,CAAA;AAEnB,EAAA,IAAA,CAAK,CAAC,EAAA,IAAM,CAAC,aAAA,KAAkB,CAAC,SAAA;AAAW,IAAA,MAAM,cAAc,QAAQ,CAAA,CAAA;AAEvE,EAAA,IAAI,CAAC,aAAe,EAAA;AAClB,IAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,GAAI,CAAA,0BAAA,CAAA,CAAA;AACZ,IAAA,OAAA;AAAA,GACF;AAEA,EAAM,MAAA,OAAA,GAAA,CAAU,4CAAW,OAAX,KAAA,IAAA,GAAA,EAAA,GAAuB,MAAMC,sBAAgB,CAAA,IAAI,MAAM,CAAA,CAAA;AAEvE,EAAA,MAAM,WAAqB,EAAC,CAAA;AAC5B,EAAM,MAAAC,yBAAA;AAAA,IACJxB,qCACK,MADL,CAAA,EAAA;AAAA,MAEE,MAAQ,EAAA,MAAA,GAASA,eAAK,CAAAf,gBAAA,CAAA,EAAA,EAAA,MAAA,CAAA,EAAL,EAAa,GAAA,EAAK,CAAC,GAAA,KAAQ,QAAS,CAAA,IAAA,CAAK,GAAG,CAAA,EAAM,CAAA,GAAA,MAAA;AAAA,KACrE,CAAA;AAAA,IACA,OAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,GACF,CAAA;AAEA,EAAO,MAAA,CAAA,GAAA,EAAK,QAAQ,aAAa,CAAA,CAAA;AAEjC,EAAA,IAAI,MAAQ,EAAA;AACV,IAAA,KAAA,MAAW,OAAO,QAAU,EAAA;AAC1B,MAAA,MAAA,CAAO,GAAI,CAAA,CAAA;AAAA,EAAK,GAAK,CAAA,CAAA,CAAA,CAAA;AAAA,KACvB;AAAA,GACF;AAEA,EAAA,IAAI,EAAI,EAAA;AACN,IAAA,MAAMwC,eAAQ,EAAC,EAAG,OAAS,EAAA,MAAA,EAAQ,QAAW,QAAQ,CAAA,CAAA;AAAA,GACxD,MAAA,IAAW,CAAC,SAAW,EAAA;AACrB,IAAA,MAAM,cAAc,QAAQ,CAAA,CAAA;AAAA,GAC9B;AACF,CAAA,CAAA;AAEA,MAAM,aAAA,GAAgB,CAAC,MAAA,KACrB,IAAI,KAAA;AAAA,EACF,CAAA,EAAA,EACE,MAAO,CAAA,MAAA,GAAS,WAAc,GAAA,QAAA,CAAA,yEAAA,CAAA;AAElC,CAAA,CAAA;AAEF,MAAM,eAAA,GAAkB,OACtB,MAAA,EACA,MACwB,KAAA;AAhM1B,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAiME,EAAM,MAAA,MAAA,GAAS,MAAM,MAAO,CAAA,MAAA;AAAA,IAC1BC,iBAAA,CAAc,KAAK,OAAQ,CAAA,MAAA,CAAO,UAAU,MAAM,CAAC,EAAE,QAAS,EAAA;AAAA,GAChE,CAAA;AACA,EAAA,MAAM,EAAM,GAAA,MAAA,CAAA,CACV,EAAO,GAAA,MAAA,CAAA,YAAA,KAAP,YAAuB,IACzB,CAAA,CAAA;AACA,EAAI,IAAA,EAAC,yBAAI,aAAe,CAAA,EAAA;AACtB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CACE,uCAAA,EAAA,CAAA,EAAA,GAAA,MAAA,CAAO,YAAP,KAAA,IAAA,GAAA,EAAA,GAAuB,aAChB,MAAO,CAAA,MAAA,CAAA,CAAA;AAAA,KAClB,CAAA;AAAA,GACF;AACA,EAAO,OAAA,EAAA,CAAA;AACT,CAAA,CAAA;AAEA,MAAM,wBAA2B,GAAA,OAC/B,OACA,EAAA,MAAA,EACA,SACyE,KAAA;AACzE,EAAA,IAAI,SAAW,EAAA;AACb,IAAO,OAAA;AAAA,MACL,WAAa,EAAA;AAAA,QACX,SAAS,EAAC;AAAA,QACV,QAAQ,EAAC;AAAA,QACT,OAAO,EAAC;AAAA,QACR,SAAS,EAAC;AAAA,QACV,aAAa,EAAC;AAAA,QACd,UAAU,EAAC;AAAA,QACX,YAAY,EAAC;AAAA,QACb,OAAO,EAAC;AAAA,QACR,SAAS,EAAC;AAAA,QACV,YAAY,EAAC;AAAA,OACf;AAAA,MACA,QAAA,EAAU,CAAC,SAAA,CAAU,OAAO,CAAA;AAAA,KAC9B,CAAA;AAAA,GACF;AAEA,EAAA,MAAM,WAAW,MAAMD,cAAA;AAAA,IACrB,EAAC;AAAA,IACD,OAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA,CAAA;AAAA,IACA,KAAA,CAAA;AAAA,IACA,IAAA;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,YAAA,GAAe,MAAM,OAAQ,CAAA,GAAA;AAAA,IACjC,SAAS,GAAI,CAAA,CAAC,OAAY,KAAAV,yBAAA,CAAmB,OAAO,CAAC,CAAA;AAAA,GACvD,CAAA;AAEA,EAAM,MAAA,WAAA,GAAc,aAAa,CAAC,CAAA,CAAA;AAClC,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,YAAA,CAAa,QAAQ,CAAK,EAAA,EAAA;AAC5C,IAAA,mBAAA,CAAoB,WAAa,EAAA,YAAA,CAAa,CAAC,CAAA,EAAG,CAAC,CAAA,CAAA;AAAA,GACrD;AAEA,EAAO,OAAA,EAAE,aAAa,QAAS,EAAA,CAAA;AACjC,CAAA,CAAA;AAEA,MAAM,mBAAsB,GAAA,CAC1B,CACA,EAAA,CAAA,EACA,GACAY,KACG,KAAA;AACH,EAAI,IAAA,GAAA,CAAA;AACJ,EAAI,IAAA,OAAO,CAAM,KAAA,OAAO,CAAG,EAAA;AACzB,IAAM,GAAA,GAAA,IAAA,CAAA;AAAA,GACR;AAEA,EAAA,IAAI,CAAC,CAAA,IAAK,OAAO,CAAA,KAAM,QAAU,EAAA;AAC/B,IAAA,IAAI,MAAM,CAAG,EAAA;AACX,MAAM,GAAA,GAAA,IAAA,CAAA;AAAA,KACR;AAAA,GACK,MAAA;AACL,IAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,CAAC,CAAG,EAAA;AACpB,MAAA,KAAA,IAAS,IAAI,CAAG,EAAA,GAAA,GAAM,EAAE,MAAQ,EAAA,CAAA,GAAI,KAAK,CAAK,EAAA,EAAA;AAC5C,QAAA,mBAAA;AAAA,UACE,EAAE,CAAC,CAAA;AAAA,UACF,EAAgB,CAAC,CAAA;AAAA,UAClB,CAAA;AAAA,UACAA,KAAO,GAAA,CAAA,EAAGA,KAAQ,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,GAAO,OAAO,CAAC,CAAA;AAAA,SACnC,CAAA;AAAA,OACF;AAAA,KACK,MAAA;AACL,MAAA,KAAA,MAAW,OAAO,CAAG,EAAA;AACnB,QAAA,mBAAA;AAAA,UACE,EAAE,GAAqB,CAAA;AAAA,UACtB,EAA8B,GAAG,CAAA;AAAA,UAClC,CAAA;AAAA,UACAA,KAAAA,GAAO,CAAGA,EAAAA,KAAAA,CAAAA,CAAAA,EAAQ,GAAQ,CAAA,CAAA,GAAA,GAAA;AAAA,SAC5B,CAAA;AAAA,OACF;AAAA,KACF;AAAA,GACF;AAEA,EAAA,IAAI,GAAK,EAAA;AACP,IAAA,MAAM,IAAI,KAAA,CAAM,CAAGA,EAAAA,KAAAA,CAAAA,+BAAAA,EAAsC,CAAG,CAAA,CAAA,CAAA,CAAA;AAAA,GAC9D;AACF,CAAA,CAAA;AAEA,MAAM,cAAiB,GAAA,OACrB,EACA,EAAA,aAAA,EACA,UACA,WACuB,KAAA;AA5SzB,EAAA,IAAA,EAAA,CAAA;AA6SE,EAAM,MAAA,UAAA,uBAAiB,GAAY,EAAA,CAAA;AACnC,EAAM,MAAA,WAAA,uBAAkB,GAAuB,EAAA,CAAA;AAE/C,EAAA,MAAM,SAAuB,GAAA;AAAA,IAC3B,OAAA,kBAAa,IAAA,GAAA,CAAI,KAAS,CAAA,CAAA;AAAA,IAC1B,KAAA,sBAAW,GAAI,EAAA;AAAA,IACf,QAAQ,EAAC;AAAA,IACT,SAAS,EAAC;AAAA,GACZ,CAAA;AAEA,EAAM,MAAA,OAAA,uBAAc,GAAwB,EAAA,CAAA;AAE5C,EAAA,KAAA,MAAW,OAAO,EAAI,EAAA;AACpB,IAAI,IAAA,GAAA,CAAI,CAAC,CAAM,KAAA,GAAA;AAAK,MAAA,SAAA;AAEpB,IAAM,MAAA,KAAA,GAAQ,GAAG,GAAsB,CAAA,CAAA;AAEvC,IAAI,IAAA,CAAC,MAAM,KAAO,EAAA;AAChB,MAAM,MAAA,IAAI,KAAM,CAAA,CAAA,MAAA,EAAS,GAA+B,CAAA,0BAAA,CAAA,CAAA,CAAA;AAAA,KAC1D;AAEA,IAAM,MAAA,EAAE,MAAO,EAAA,GAAI,KAAM,CAAA,CAAA,CAAA;AACzB,IAAA,MAAM,OAAO9B,0BAAoB,CAAA,EAAE,QAAQ,IAAM,EAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AAC9D,IAAI,IAAA,UAAA,CAAW,GAAI,CAAA,IAAI,CAAG,EAAA;AACxB,MAAM,MAAA,IAAI,KAAM,CAAA,CAAA,MAAA,EAAS,IAAgC,CAAA,0BAAA,CAAA,CAAA,CAAA;AAAA,KAC3D;AAEA,IAAA,UAAA,CAAW,IAAI,IAAI,CAAA,CAAA;AAEnB,IAAI,IAAA,MAAA;AAAQ,MAAU,SAAA,CAAA,OAAA,CAAQ,IAAI,MAAM,CAAA,CAAA;AAExC,IAAU,SAAA,CAAA,MAAA,CAAO,KAAK,KAAc,CAAA,CAAA;AAEpC,IAAWC,KAAAA,MAAAA,IAAAA,IAAO,MAAM,SAAW,EAAA;AACjC,MAAM,MAAA,MAAA,GAAS,KAAM,CAAA,KAAA,CAAMA,IAAG,CAAA,CAAA;AAE9B,MAAI,IAAA,MAAA,IAAU,eAAe,MAAQ,EAAA;AACnC,QAAiC,gCAAA,CAAA,MAAA,EAAQ,aAAa,SAAS,CAAA,CAAA;AAAA,OACjE;AAAA,KACF;AAEA,IAAWA,KAAAA,MAAAA,IAAAA,IAAO,MAAM,KAAO,EAAA;AAC7B,MAAM,MAAA,MAAA,GAAS,KAAM,CAAA,KAAA,CAAMA,IAAG,CAAA,CAAA;AAE9B,MAAI,IAAA,MAAA,CAAO,KAAK,QAAU,EAAA;AACxB,QAAO,OAAA,KAAA,CAAM,MAAMA,IAAG,CAAA,CAAA;AAAA,OACxB,MAAA,IAAW,kBAAkBJ,gBAAc,EAAA;AACzC,QAAA,MAAM,CAAC,UAAA,GAAa,aAAed,EAAAA,KAAI,CAAI,GAAAI,gCAAA;AAAA,UACzC,MAAO,CAAA,QAAA;AAAA,SACT,CAAA;AACA,QAAQ,OAAA,CAAA,GAAA,CAAI,OAAO,QAAU,EAAA;AAAA,UAC3B,UAAA;AAAA,UACA,IAAAJ,EAAAA,KAAAA;AAAA,UACA,SAAS,EAAO,GAAA,MAAA,CAAA,IAAA,CAAK,OAAZ,IACP,GAAA,EAAA,GAAA,IAAIgD,kBAAcC,uBAAmB,CAAA;AAAA,SACxC,CAAA,CAAA;AAAA,OACH,MAAA,IAAW,MAAO,CAAA,QAAA,KAAa,MAAQ,EAAA;AACrC,QAAkB,iBAAA,CAAA,MAAA,EAAQ,eAAe,SAAS,CAAA,CAAA;AAAA,OACpD;AAAA,KACF;AAAA,GACF;AAEA,EAAA,IAAI,SAAS,UAAY,EAAA;AACvB,IAAW,KAAA,MAAA,SAAA,IAAa,SAAS,UAAY,EAAA;AAC3C,MAAA,MAAM,CAAC,MAAM,CAAI,GAAA7C,gCAAA,CAA0B,UAAU,IAAI,CAAA,CAAA;AACzD,MAAI,IAAA,MAAA;AAAQ,QAAU,SAAA,CAAA,OAAA,CAAQ,IAAI,MAAM,CAAA,CAAA;AAAA,KAC1C;AAAA,GACF;AAEA,EAAA,IAAI,SAAS,OAAS,EAAA;AACpB,IAAW,KAAA,MAAA,GAAA,IAAO,SAAS,OAAS,EAAA;AAClC,MAAA,MAAM,CAAC,UAAa,GAAA,aAAA,EAAe,IAAI,CAAA,GAAIA,iCAA0B,GAAG,CAAA,CAAA;AACxE,MAAA,MAAM,MAAS,GAAA,QAAA,CAAS,OAAQ,CAAA,GAAG,EAAE,WAAW,CAAA,CAAA;AAEhD,MAAA,OAAA,CAAQ,IAAI,GAAK,EAAA;AAAA,QACf,UAAA;AAAA,QACA,IAAA;AAAA,QACA,MAAA;AAAA,OACD,CAAA,CAAA;AAAA,KACH;AAAA,GACF;AAEA,EAAW,KAAA,MAAA,MAAA,IAAU,OAAQ,CAAA,MAAA,EAAU,EAAA;AACrC,IAAU,SAAA,CAAA,OAAA,CAAQ,GAAI,CAAA,MAAA,CAAO,UAAU,CAAA,CAAA;AACvC,IAAU,SAAA,CAAA,OAAA,CAAQ,KAAK,MAAM,CAAA,CAAA;AAAA,GAC/B;AAEA,EAAO,OAAA,SAAA,CAAA;AACT,CAAA,CAAA;AAEA,MAAM,iBAAoB,GAAA,CACxB,MACA,EAAA,aAAA,EACA,SACG,KAAA;AACH,EAAM,MAAA,EAAE,QAAU,EAAA,OAAA,EAAY,GAAA,MAAA,CAAA;AAK9B,EAAA,MAAM,CAAC,MAAA,EAAQ,IAAI,CAAA,GAAIA,iCAA0B,QAAQ,CAAA,CAAA;AACzD,EAAA,MAAM,aAAa,MAAU,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA,CAAA;AAE7B,EAAA,SAAA,CAAU,KAAM,CAAA,GAAA,CAAI,CAAG,EAAA,UAAA,CAAA,CAAA,EAAc,IAAQ,CAAA,CAAA,EAAA;AAAA,IAC3C,MAAQ,EAAA,UAAA;AAAA,IACR,IAAA;AAAA,IACA,MAAQ,EAAA,OAAA;AAAA,GACT,CAAA,CAAA;AACD,EAAI,IAAA,MAAA;AAAQ,IAAU,SAAA,CAAA,OAAA,CAAQ,IAAI,MAAM,CAAA,CAAA;AAC1C,CAAA,CAAA;AAEA,MAAM,gCAAmC,GAAA,CACvC,MACA,EAAA,WAAA,EACA,SACG,KAAA;AAhaL,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAiaE,EAAA,MAAM,IAAK,MAAoC,CAAA,SAAA,CAAA;AAC/C,EAAA,MAAM,IAAO,GAAA,WAAA,CAAY,GAAI,CAAA,CAAA,CAAE,KAAK,CAAA,CAAA;AACpC,EAAA,IAAI,IAAM,EAAA;AACR,IAAW,KAAA,MAAA,GAAA,IAAO,EAAE,KAAO,EAAA;AACzB,MAAI,IAAA,CAAA,CAAE,KAAM,CAAA,GAAG,CAAE,CAAA,QAAA,MAAA,CAAa,UAAK,KAAM,CAAA,GAAG,CAAd,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAiB,QAAU,CAAA,EAAA;AACvD,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,CAAA,OAAA,EAAU,UAAU,CAAE,CAAA,KAAA,CAAA,mFAAA,CAAA;AAAA,SACxB,CAAA;AAAA,OACF;AAAA,KACF;AACA,IAAA,OAAA;AAAA,GACF;AACA,EAAY,WAAA,CAAA,GAAA,CAAI,CAAE,CAAA,KAAA,EAAO,CAAC,CAAA,CAAA;AAE1B,EAAM,MAAA,SAAA,GAAY,MAAO,CAAA,MAAA,CAAO,CAAC,CAAA,CAAA;AAEjC,EAAA,MAAM,QAAsB,EAAC,CAAA;AAC7B,EAAW,KAAA,MAAA,GAAA,IAAO,UAAU,KAAO,EAAA;AACjC,IAAA,MAAMM,UAAS,MAAO,CAAA,MAAA,CAAO,SAAU,CAAA,KAAA,CAAM,GAAG,CAAC,CAAA,CAAA;AACjD,IAAAA,OAAO,CAAA,IAAA,GAAOU,eACTV,CAAAA,gBAAAA,CAAAA,EAAAA,EAAAA,OAAAA,CAAO,IADE,CAAA,EAAA;AAAA,MAEZ,IAAM,EAAA,CAAA,EAAA,GAAAA,OAAO,CAAA,IAAA,CAAK,SAAZ,IAAoB,GAAA,EAAA,GAAA,GAAA;AAAA,MAC1B,QAAU,EAAA,KAAA,CAAA;AAAA,MACV,UAAY,EAAA,KAAA,CAAA;AAAA,MACZ,OAAS,EAAA,KAAA,CAAA;AAAA,KACX,CAAA,CAAA;AACA,IAAM,KAAA,CAAAwC,sBAAA,CAAY,GAAG,CAAC,CAAIxC,GAAAA,OAAAA,CAAAA;AAAA,GAC5B;AACA,EAAA,SAAA,CAAU,KAAQ,GAAA,KAAA,CAAA;AAClB,EAAU,SAAA,CAAA,QAAA,GAAWU,eAChB,CAAAf,gBAAA,CAAA,EAAA,EAAA,SAAA,CAAU,QADM,CAAA,EAAA;AAAA,IAEnB,SAAW,EAAA;AAAA,MACT,UAAY,EAAA;AAAA,QACV,OAAA,EAAS,MAAO,CAAA,IAAA,CAAK,KAAK,CAAA;AAAA,OAC5B;AAAA,KACF;AAAA,IACA,YAAc,EAAA,KAAA;AAAA,GAChB,CAAA,CAAA;AAEA,EAAU,SAAA,CAAA,MAAA,CAAO,KAAK,SAAS,CAAA,CAAA;AAE/B,EAAA,OAAA;AACF,CAAA,CAAA;AAEA,MAAM,aAAA,GAAgB,CAAC,QAAwB,KAAA;AAC7C,EAAO,OAAA,OAAA,CAAQ,IAAI,QAAS,CAAA,GAAA,CAAI,CAAC,CAAM,KAAA,CAAA,CAAE,KAAM,EAAC,CAAC,CAAA,CAAA;AACnD,CAAA;;;;;;;;;;;;;;;;;;;;;AC1aa,MAAA,qBAAA,GAAwB,CACnC,IAAA,EACA,MAC6C,KAAA;AAxC/C,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAyCE,EAAA,MAAM,mBACJ,EAAO,GAAA,MAAA,CAAA,eAAA,KAAP,IAA2B,GAAA,EAAA,GAAA,CAAC,SAAiB,CAAY,SAAA,EAAA,IAAA,CAAA,SAAA,CAAA,CAAA;AAE3D,EAAA,MAAM,aAAyB,EAAC,CAAA;AAChC,EAAA,MAAM,QAAe,EAAC,CAAA;AACtB,EAAA,KAAA,MAAW,OAAO,IAAM,EAAA;AACtB,IAAI,IAAA,GAAA,CAAI,SAAS,OAAS,EAAA;AACxB,MAAM,MAAA,QAAA,GAAW6C,sBAAY,CAAA,GAAA,CAAI,IAAI,CAAA,CAAA;AACrC,MAAM,MAAA,WAAA,GAAc,IAAI,MAAS,GAAA,CAAA,EAAG,IAAI,MAAU,CAAA,CAAA,EAAA,GAAA,CAAI,SAAS,GAAI,CAAA,IAAA,CAAA;AACnE,MAAA,IAAI,YAAY,IAAK,CAAA,OAAA,CAAQ,OAAO,QAAU,EAAA,eAAA,CAAgB,QAAQ,CAAC,CAAA,CAAA;AACvE,MAAI,IAAA,CAAC,SAAU,CAAA,QAAA,CAAS,KAAK,CAAA;AAAG,QAAa,SAAA,IAAA,KAAA,CAAA;AAE7C,MAAM,MAAA,IAAA,GAAOC,uBAAa,CAAA,GAAA,CAAI,IAAI,CAAA,CAAA;AAElC,MAAA,MAAM,IAAkB,GAAA;AAAA,QACtB,WAAA;AAAA,QACA,GAAK,EAAA,QAAA;AAAA,QACL,IAAM,EAAA,SAAA;AAAA,QACN,IAAA;AAAA,QACA,WAAW,CAAG,EAAA,IAAA,CAAA,KAAA,CAAA;AAAA,OAChB,CAAA;AAEA,MAAA,UAAA,CAAW,WAAW,CAAI,GAAA,IAAA,CAAA;AAE1B,MAAA,IAAI,IAAI,WAAa,EAAA;AACnB,QAAA,KAAA,MAAW,EAAE,UAAA,EAAgB,IAAA,GAAA,CAAI,WAAa,EAAA;AAC5C,UAAA,IAAI,CAAC,UAAA;AAAY,YAAA,SAAA;AAEjB,UAAA,CAAA,CAAC,gBAAM,UAAW,CAAA,SAAA,CAAA,KAAjB,IAA0C,GAAA,EAAA,GAAA,KAAA,CAAA,EAAA,CAAA,GAAA,IAAI,IAAK,CAAA;AAAA,YAClD,KAAO,EAAA,IAAA;AAAA,YACP,UAAA;AAAA,WACD,CAAA,CAAA;AAAA,SACH;AAAA,OACF;AAAA,KACF;AAAA,GACF;AAEA,EAAO,OAAA,EAAE,YAAY,KAAM,EAAA,CAAA;AAC7B,CAAA,CAAA;AAEO,MAAM,kBAAkB,CAC7B,UAAA,EACA,KACA,EAAA,GAAA,EACA,eACA,mBACoB,KAAA;AAvFtB,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAwFE,EAAM,MAAA,SAAA,GACJ,UAAW,CAAA,GAAA,CAAI,MAAS,GAAA,CAAA,EAAG,IAAI,MAAU,CAAA,CAAA,EAAA,GAAA,CAAI,IAAS,CAAA,CAAA,GAAA,GAAA,CAAI,IAAI,CAAA,CAAA;AAEhE,EAAA,MAAM,OAAwB,GAAA;AAAA,IAC5B,YAAc,EAAA,mCAAA;AAAA,IACd,CAACC,wBAAc,CAAA,SAAA,CAAU,IAAM,EAAA,aAAa,CAAC,GAAG,mBAAA;AAAA,GAClD,CAAA;AAEA,EAAA,MAAM,QAAgB,EAAC,CAAA;AAEvB,EAAA,IAAI,IAAI,MAAQ,EAAA;AACd,IAAA,KAAA,CAAM,IAAK,CAAA,CAAA,SAAA,EAAYC,sBAAY,CAAA,GAAA,CAAI,MAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,GACnD;AAEA,EAAA,KAAA,CAAM,IAAK,CAAA,CAAA,iBAAA,EAAoBA,sBAAY,CAAA,GAAA,CAAI,IAAI,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA;AAEvD,EAAA,IAAI,IAAI,OAAS,EAAA;AACf,IAAA,KAAA,CAAM,IAAK,CAAA,CAAA,UAAA,EAAaA,sBAAY,CAAA,GAAA,CAAI,OAAO,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,GACrD;AAEA,EAAI,IAAA,GAAA,CAAI,iBAAiB,QAAU,EAAA;AACjC,IAAA,KAAA,CAAM,KAAK,sBAAsB,CAAA,CAAA;AAAA,GACnC;AAEA,EAAA,MAAM,YAAe,GAAA,OAAA;AAAA,IACnB,GAAA,CAAI,gBAAc,EAAI,GAAA,GAAA,CAAA,OAAA,KAAJ,mBAAa,MAAU,CAAA,KAAA,CAAA,EAAA,GAAA,GAAA,CAAI,gBAAJ,IAAiB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAA,CAAA;AAAA,GAC5D,CAAA;AAEA,EAAM,MAAA,SAAA,GAAYC,sBAAmB,CAAA,EAAE,CAAG,EAAA,GAAA,EAAK,OAAO,GAAI,CAAA,IAAA,EAAQ,EAAA,GAAA,CAAI,KAAK,CAAA,CAAA;AAE3E,EAAM,KAAA,CAAA,IAAA;AAAA,IACJ,CAAA,0BAAA,EAA6B,eAAe,QAAW,GAAA,EAAA,CAAA,SAAA,CAAA;AAAA,IACvD,YAAA,GAAe,CAAC,SAAS,CAAI,GAAA,SAAA;AAAA,IAC7B,eAAe,OAAU,GAAA,MAAA;AAAA,GAC3B,CAAA;AAEA,EAAA,IAAI,YAAc,EAAA;AAChB,IAAA,KAAA,CAAM,KAAKC,qBAAkB,CAAA,EAAI,EAAA,GAAG,GAAG,IAAI,CAAA,CAAA;AAAA,GAC7C;AAEA,EAAA,MAAM,YAAoB,EAAC,CAAA;AAE3B,EAAM,MAAA,aAAA,GAAgB,IAAI,MAAS,GAAA,CAAA,EAAG,IAAI,MAAU,CAAA,CAAA,EAAA,GAAA,CAAI,SAAS,GAAI,CAAA,IAAA,CAAA;AACrE,EAAM,MAAA,SAAA,GAAY,MAAM,aAAa,CAAA,CAAA;AACrC,EAAA,IAAI,SAAW,EAAA;AACb,IAAA,KAAA,MAAW,EAAE,KAAA,EAAO,UAAW,EAAA,IAAK,SAAW,EAAA;AAC7C,MAAA,OAAA,CAAQH,yBAAc,SAAU,CAAA,IAAA,EAAM,MAAM,IAAI,CAAC,IAAI,KAAM,CAAA,SAAA,CAAA;AAE3D,MAAU,SAAA,CAAA,IAAA;AAAA,QACR,CAAA,EAAG,KAAM,CAAA,GAAA,CAAA,uBAAA,EAA6B,KAAM,CAAA,SAAA,CAAA,GAAA,CAAA;AAAA,QAC5C;AAAA,UACE,aAAa,UAAW,CAAA,cAAA,CACrB,IAAIC,sBAAW,CAAA,CACf,KAAK,IAAI,CAAA,CAAA,EAAA,CAAA;AAAA,UACZ,gBAAgB,UAAW,CAAA,OAAA,CAAQ,IAAIA,sBAAW,CAAA,CAAE,KAAK,IAAI,CAAA,CAAA,EAAA,CAAA;AAAA,SAC/D;AAAA,QACA,KAAA;AAAA,OACF,CAAA;AAAA,KACF;AAAA,GACF;AAEA,EAAA,IAAI,IAAI,WAAa,EAAA;AACnB,IAAA,KAAA,MAAW,EAAE,UAAA,EAAgB,IAAA,GAAA,CAAI,WAAa,EAAA;AAC5C,MAAA,IAAI,CAAC,UAAA;AAAY,QAAA,SAAA;AAEjB,MAAM,MAAA,KAAA,GAAQ,UAAW,CAAA,UAAA,CAAW,SAAmB,CAAA,CAAA;AACvD,MAAA,OAAA,CAAQD,yBAAc,SAAU,CAAA,IAAA,EAAM,MAAM,IAAI,CAAC,IAAI,KAAM,CAAA,SAAA,CAAA;AAE3D,MAAU,SAAA,CAAA,IAAA;AAAA,QACR,CAAA,EAAG,KAAM,CAAA,GAAA,CAAA,qBAAA,EAA2B,KAAM,CAAA,SAAA,CAAA,GAAA,CAAA;AAAA,QAC1C;AAAA,UACE,aAAa,UAAW,CAAA,OAAA,CAAQ,IAAIC,sBAAW,CAAA,CAAE,KAAK,IAAI,CAAA,CAAA,EAAA,CAAA;AAAA,UAC1D,gBAAgB,UAAW,CAAA,cAAA,CACxB,IAAIA,sBAAW,CAAA,CACf,KAAK,IAAI,CAAA,CAAA,EAAA,CAAA;AAAA,SACd;AAAA,QACA,KAAA;AAAA,OACF,CAAA;AAAA,KACF;AAAA,GACF;AAEA,EAAA,IAAI,UAAU,MAAQ,EAAA;AACpB,IAAA,KAAA,CAAM,IAAK,CAAA,EAAA,EAAI,eAAiB,EAAA,SAAA,EAAW,IAAI,CAAA,CAAA;AAAA,GACjD;AAEA,EAAM,MAAA,WAAA,GAAc,cAAc,OAAO,CAAA,CAAA;AAEzC,EAAM,MAAA,EAAE,IAAM,EAAA,SAAA,EAAc,GAAA,SAAA,CAAA;AAC5B,EAAA,MAAM,IAAe,GAAA;AAAA,IACnB,eAAe,IAAqB,CAAA,cAAA,EAAA,SAAA,CAAA;AAAA,YAAA,EAC1B,IAAwB,CAAA,iBAAA,EAAA,SAAA,CAAA;AAAA,YAAA,EACxB,IAA0B,CAAA,mBAAA,EAAA,SAAA,CAAA;AAAA;AAAA,aAAA,EAEzB,SAAqB,CAAA,SAAA,EAAA,mBAAA,CAAA,EAAA,CAAA;AAAA,IAChC,KAAA;AAAA,IACA,KAAA;AAAA,GACF,CAAA;AAEA,EAAA,OAAO,iCACF,SADE,CAAA,EAAA;AAAA,IAEL,SAAS,WAAc,GAAA,MAAA,GAASZ,uBAAa,CAAA,IAAA,EAAM,IAAI,IAAI,CAAA;AAAA,GAC7D,CAAA,CAAA;AACF,CAAA,CAAA;AAEA,SAAS,cAAc,OAAyC,EAAA;AAC9D,EAAA,OAAO,MAAO,CAAA,OAAA,CAAQ,OAAO,CAAA,CAC1B,IAAI,CAAC,CAAC,IAAM,EAAA,IAAI,MAAM,CAAY,SAAA,EAAA,IAAA,CAAA,SAAA,EAAgB,IAAQ,CAAA,EAAA,CAAA,CAAA,CAC1D,KAAK,IAAI,CAAA,CAAA;AACd;;AClLA,MAAM,EAAE,gBAAA,EAAkB,YAAc,EAAA,UAAA,EAAe,GAAA,UAAA,CAAA;AAIhD,MAAM,sBAAyB,GAAA,OACpC,MACA,EAAA,MAAA,EACA,YACA,OACgC,KAAA;AAChC,EAAA,MAAM,OAAU,GAAA,MAAM,EAAG,CAAA,QAAA,CAAS,QAAQ,OAAO,CAAA,CAAA;AACjD,EAAM,MAAA,UAAA,GAAa,gBAAgB,OAAO,CAAA,CAAA;AAC1C,EAAM,MAAA,UAAA,GAAa,uBAAuB,UAAU,CAAA,CAAA;AACpD,EAAA,IAAI,CAAC,UAAY,EAAA;AACf,IAAM,MAAA,IAAI,MAAM,CAAiD,+CAAA,CAAA,CAAA,CAAA;AAAA,GACnE;AACA,EAAA,MAAM,EAAE,MAAQ,EAAA,UAAA,EAAe,GAAA,gBAAA,CAAiB,YAAY,UAAU,CAAA,CAAA;AAEtE,EAAA,MAAM,UAAoB,EAAC,CAAA;AAE3B,EAAI,IAAA,cAAA,CAAA;AACJ,EAAI,IAAA,UAAA,CAAW,MAAU,IAAA,OAAA,CAAQ,MAAQ,EAAA;AACvC,IAAI,IAAA,IAAA,GAAO,QAAQ,KAAM,CAAA,MAAA,CAAO,KAAK,MAAO,CAAA,GAAG,EAAE,IAAK,EAAA,CAAA;AAEtD,IAAI,IAAA,IAAA,CAAK,CAAC,CAAM,KAAA,GAAA;AAAK,MAAA,IAAA,GAAO,CAAO,IAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA;AAEnC,IAAA,IAAA,GAAO,UAAU,IAAK,CAAA,KAAA,CAAM,CAAG,EAAA,CAAA,CAAE,EAAE,IAAK,EAAA,CAAA;AAExC,IAAI,IAAA,CAAC,IAAK,CAAA,QAAA,CAAS,GAAG,CAAA;AAAG,MAAQ,IAAA,IAAA,GAAA,CAAA;AAEjC,IAAA,IAAI,WAAW,MAAQ,EAAA;AACrB,MAAQ,IAAA,IAAA,CAAA;AAAA,eAAA,EAAoB,UACzB,CAAA,GAAA;AAAA,QAAI,CAAC,GACJ,KAAA,GAAA,CAAI,OAAU,GAAA,CAAA,EAAA,EAAK,IAAI,IAAU,CAAA,GAAA,EAAA,GAAA,CAAI,OAAe,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,EAAI,GAAI,CAAA,IAAA,CAAA,CAAA,CAAA;AAAA,OAC9D,CACC,KAAK,IAAI,CAAA,CAAA,EAAA,CAAA,CAAA;AAAA,KACd;AAEA,IAAA,IAAI,QAAQ,MAAQ,EAAA;AAClB,MAAQ,IAAA,IAAA,CAAA;AAAA;AAAA,IAAuB,EAAA,OAAA,CAC5B,IAAK,CAAA,CAAC,CAAG,EAAA,CAAA,KAAO,CAAE,CAAA,IAAA,GAAO,CAAE,CAAA,IAAA,GAAO,CAAI,GAAA,CAAA,CAAG,CACzC,CAAA,GAAA;AAAA,QACC,CAAC,GAAK,KAAA;AA5DhB,UAAA,IAAA,EAAA,CAAA;AA6DY,UAAG,OAAA,CAAA,EAAAe,yBAAA;AAAA,YACD,IAAI,MAAS,GAAA,CAAA,EAAG,IAAI,MAAU,CAAA,CAAA,EAAA,GAAA,CAAI,SAAS,GAAI,CAAA,IAAA;AAAA,WACjD,CAAA,SAAA,EAAa,IAAI,QAAS,CAAA,MAAA;AAAA,YACxB,EAAE,CAAA,EAAG,GAAK,EAAA,KAAA,EAAO,IAAI,IAAK,EAAA;AAAA,YAAA,CAC1B,EAAI,GAAA,GAAA,CAAA,QAAA,CAAS,IAAK,CAAA,IAAA,KAAlB,IAA0B,GAAA,EAAA,GAAA,EAAA;AAAA,WAC5B,CAAA,CAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OACJ,CACC,KAAK,QAAQ,CAAA,CAAA;AAAA,IAAA,CAAA,CAAA;AAAA,KAClB;AAEA,IAAA,cAAA,GAAiB,IAAO,GAAA,KAAA,CAAA;AAAA,GAC1B;AAEA,EAAA,MAAM,aAAgB,GAAA,qBAAA;AAAA,IACpB,OAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,GACF,CAAA;AAEA,EAAA,IAAI,aAAe,EAAA;AACjB,IAAA,SAAA;AAAA,MACE,OAAA;AAAA,MACA,OAAA;AAAA,MACA,cAAc,OAAQ,CAAA,GAAA;AAAA,MACtB,cAAc,OAAQ,CAAA,IAAA;AAAA,KACxB,CAAA;AAAA,GACF;AAEA,EAAA,IAAI,cAAgB,EAAA;AAClB,IAAA,cAAA,CAAe,SAAS,OAAS,EAAA,MAAA,CAAO,GAAK,EAAA,MAAA,CAAO,KAAK,cAAc,CAAA,CAAA;AAAA,GACzE;AAEA,EAAA,IAAI,aAAe,EAAA;AACjB,IAAA,SAAA;AAAA,MACE,OAAA;AAAA,MACA,OAAA;AAAA,MACA,cAAc,UAAW,CAAA,GAAA;AAAA,MACzB,cAAc,UAAW,CAAA,IAAA;AAAA,KAC3B,CAAA;AAAA,GACF;AAEA,EAAO,OAAA,YAAA,CAAa,SAAS,OAAO,CAAA,CAAA;AACtC,CAAA,CAAA;AAEA,MAAM,eAAA,GAAkB,CAAC,OAA0C,KAAA;AACjE,EAAA,OAAO,iBAAiB,SAAW,EAAA,OAAA,EAAS,YAAa,CAAA,MAAA,EAAQ,IAAI,CAClE,CAAA,UAAA,CAAA;AACL,CAAA,CAAA;AAEA,MAAM,sBAAA,GAAyB,CAC7B,UACuB,KAAA;AAlHzB,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAmHE,EAAA,KAAA,MAAW,QAAQ,UAAY,EAAA;AAC7B,IAAI,IAAA,IAAA,CAAK,SAAS,UAAW,CAAA,iBAAA;AAAmB,MAAA,SAAA;AAEhD,IAAA,MAAM,GAAM,GAAA,IAAA,CAAA;AACZ,IAAA,MAAM,SAAS,GAAI,CAAA,eAAA,CAAgB,SAAU,CAAA,KAAA,CAAM,GAAG,CAAE,CAAA,CAAA,CAAA;AACxD,IAAA,IAAI,MAAW,KAAA,YAAA;AAAc,MAAA,SAAA;AAE7B,IAAA,IAAI,CAAC,GAAI,CAAA,YAAA;AAAc,MAAA,SAAA;AAEvB,IAAA,MAAM,QAAY,GAAA,CAAA,EAAA,GAAA,GAAA,CAAI,YAAa,CAAA,aAAA,KAAjB,IAAiD,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAA,CAAA;AAInE,IAAA,KAAA,MAAW,WAAW,QAAU,EAAA;AAC9B,MACE,IAAA,CAAA,CAAA,EAAA,GAAA,OAAA,CAAQ,iBAAR,IAAsB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAA,MAAgB,eACtC,OAAQ,CAAA,IAAA,CAAK,gBAAgB,WAC7B,EAAA;AACA,QAAO,OAAA,OAAA,CAAQ,IAAK,CAAA,WAAA,CAAY,QAAS,EAAA,CAAA;AAAA,OAC3C;AAAA,KACF;AAAA,GACF;AAEA,EAAA,OAAA;AACF,CAAA,CAAA;AAEA,MAAM,wBAAwB,CAC5B,OAAA,EACA,UACA,EAAA,MAAA,EACA,QACA,MACG,KAAA;AACH,EAAM,MAAA,MAAA,GAAS,mBAAoB,CAAA,OAAA,EAAS,MAAM,CAAA,CAAA;AAElD,EAAA,IAAI,OAAU,GAAA,EAAA,CAAA;AACd,EAAA,IAAI,UAAa,GAAA,EAAA,CAAA;AACjB,EAAA,MAAM,eACJ,MAAO,CAAA,UAAA,CAAW,MAAU,IAAA,CAAC,OAAO,UAAW,CAAA,gBAAA,CAAA;AACjD,EAAM,MAAA,iBAAA,GAAoB,OACvB,CAAA,KAAA,CAAM,MAAO,CAAA,UAAA,CAAW,KAAK,MAAO,CAAA,GAAG,CACvC,CAAA,QAAA,CAAS,IAAI,CAAA,CAAA;AAEhB,EAAM,MAAA,SAAA,GAAY,MAAO,CAAA,MAAA,CAAO,MAAM,CAAA,CAAA;AACtC,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,SAAA,CAAU,QAAQ,CAAK,EAAA,EAAA;AACzC,IAAA,MAAM,EAAE,IAAM,EAAA,SAAA,EAAW,GAAI,EAAA,GAAI,UAAU,CAAC,CAAA,CAAA;AAC5C,IAAM,MAAA,UAAA,GAAaJ,wBAAc,CAAA,MAAA,EAAQ,IAAI,CAAA,CAAA;AAE7C,IAAW,OAAA,IAAA,CAAA;AAAA,SAAA,EAAc,SAAqB,CAAA,SAAA,EAAA,UAAA,CAAA,EAAA,CAAA,CAAA;AAE9C,IAAA,UAAA,IAAc,CACZ,EAAA,CAAA,KAAM,CAAK,IAAA,YAAA,GAAe,GAAM,GAAA,EAAA,CAAA;AAAA,EAC7B,WAAW,GAAQ,CAAA,EAAA,EAAA,SAAA,CAAA,CAAA,CAAA,CAAA;AAExB,IAAA,IAAI,CAAM,KAAA,SAAA,CAAU,MAAS,GAAA,CAAA,IAAK,CAAC,iBAAmB,EAAA;AACpD,MAAc,UAAA,IAAA,CAAA;AAAA,EAAK,MAAA,CAAA,CAAA,CAAA;AAAA,KACrB;AAAA,GACF;AAEA,EAAA,IAAI,CAAC,OAAQ,CAAA,MAAA;AAAQ,IAAA,OAAA;AAErB,EAAA,IAAI,SAAY,GAAA,CAAA,CAAA;AAChB,EAAA,KAAA,MAAW,QAAQ,UAAY,EAAA;AAC7B,IAAI,IAAA,IAAA,CAAK,IAAS,KAAA,UAAA,CAAW,iBAAmB,EAAA;AAC9C,MAAA,SAAA,GAAY,IAAK,CAAA,GAAA,CAAA;AAAA,KACnB;AAAA,GACF;AAEA,EAAO,OAAA;AAAA,IACL,OAAS,EAAA,EAAE,GAAK,EAAA,SAAA,EAAW,MAAM,OAAQ,EAAA;AAAA,IACzC,YAAY,EAAE,GAAA,EAAK,OAAO,UAAW,CAAA,GAAA,EAAK,MAAM,UAAW,EAAA;AAAA,GAC7D,CAAA;AACF,CAAA,CAAA;AAEA,MAAM,mBAAA,GAAsB,CAAC,OAAA,EAAiB,MAA+B,KAAA;AA7L7E,EAAA,IAAA,EAAA,CAAA;AA8LE,EAAM,MAAA,KAAA,GAAQ,QAAQ,KAAM,CAAA,CAAA,EAAG,OAAO,GAAG,CAAA,CAAE,MAAM,IAAI,CAAA,CAAA;AACrD,EAAA,MAAM,IAAO,GAAA,KAAA,CAAM,KAAM,CAAA,MAAA,GAAS,CAAC,CAAA,CAAA;AACnC,EAAA,OAAA,CAAA,CAAO,EAAK,GAAA,IAAA,CAAA,KAAA,CAAM,MAAM,CAAA,KAAjB,mBAAqB,CAAM,CAAA,KAAA,EAAA,CAAA;AACpC,CAAA,CAAA;AAEA,MAAM,gBAAA,GAAmB,CACvB,UAAA,EACA,UACgE,KAAA;AAChE,EAAA,KAAA,MAAW,KAAK,UAAY,EAAA;AAC1B,IAAI,IAAA,CAAA,CAAE,SAAS,UAAW,CAAA,iBAAA;AAAmB,MAAA,SAAA;AAE7C,IAAW,KAAA,MAAA,IAAA,IAAS,CAAwB,CAAA,eAAA,CAAgB,YAAc,EAAA;AACxE,MAAA,MAAM,OAAO,IAAK,CAAA,WAAA,CAAA;AAClB,MAAI,IAAA,CAAA,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAM,UAAS,UAAW,CAAA,cAAA;AAAgB,QAAA,SAAA;AAE9C,MAAI,IAAA,IAAA,CAAK,UAAW,CAAA,OAAA,EAAc,KAAA,UAAA;AAAY,QAAA,SAAA;AAE9C,MAAI,IAAA,IAAA,CAAK,SAAU,CAAA,MAAA,KAAW,CAAG,EAAA;AAC/B,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,0DAAA;AAAA,SACF,CAAA;AAAA,OACF;AAEA,MAAM,MAAA,MAAA,GAAS,IAAK,CAAA,SAAA,CAAU,CAAC,CAAA,CAAA;AAC/B,MAAI,IAAA,CAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,IAAS,MAAA,UAAA,CAAW,uBAAyB,EAAA;AACvD,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,wDAAA;AAAA,SACF,CAAA;AAAA,OACF;AAEA,MAAA,OAAO,EAAE,MAAQ,EAAA,IAAA,CAAK,UAAU,CAAC,CAAA,EAAG,YAAY,MAAO,EAAA,CAAA;AAAA,KACzD;AAAA,GACF;AAEA,EAAM,MAAA,IAAI,MAAM,0CAA0C,CAAA,CAAA;AAC5D,CAAA,CAAA;AAEA,MAAM,YAAY,CAChB,OAAA,EACA,SACA,EACA,EAAA,IAAA,EACA,MAAM,EACH,KAAA;AACH,EAAI,IAAA,OAAA,CAAQ,WAAW,CAAG,EAAA;AACxB,IAAQ,OAAA,CAAA,IAAA,CAAK,CAAC,CAAA,EAAG,EAAE,CAAA,EAAG,MAAM,CAAC,GAAA,EAAK,OAAQ,CAAA,MAAM,CAAC,CAAA,CAAA;AAAA,GAC5C,MAAA;AACL,IAAA,MAAM,IAAO,GAAA,OAAA,CAAQ,OAAQ,CAAA,MAAA,GAAS,CAAC,CAAA,CAAA;AACvC,IAAA,IAAA,CAAK,CAAC,CAAI,GAAA,EAAA,CAAA;AACV,IAAA,OAAA,CAAQ,KAAK,IAAM,EAAA,CAAC,GAAK,EAAA,OAAA,CAAQ,MAAM,CAAC,CAAA,CAAA;AAAA,GAC1C;AACF,CAAA,CAAA;AAEA,MAAM,iBAAiB,CACrB,OAAA,EACA,OACA,EAAA,IAAA,EACA,IACA,IACG,KAAA;AACH,EAAA,SAAA,CAAU,OAAS,EAAA,OAAA,EAAS,IAAM,EAAA,IAAA,EAAM,EAAE,CAAA,CAAA;AAC5C,CAAA,CAAA;AAEA,MAAM,YAAA,GAAe,CAAC,OAAA,EAAiB,OAAsB,KAAA;AAC3D,EAAO,OAAA,OAAA,CAAQ,SACX,OACG,CAAA,GAAA;AAAA,IAAI,CAAC,IAAA,KACJ,OAAO,IAAA,KAAS,QAAW,GAAA,IAAA,GAAO,OAAQ,CAAA,KAAA,CAAM,IAAK,CAAA,CAAC,CAAG,EAAA,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,GAClE,CACC,IAAK,CAAA,EAAE,CACV,GAAA,OAAA,CAAA;AACN,CAAA;;AChPa,MAAA,IAAA,GAAO,OAClB,OAAA,EACA,MACG,KAAA;AACH,EAAA,IAAI,CAAC,MAAA,CAAO,MAAU,IAAA,CAAC,OAAO,SAAW,EAAA;AACvC,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,EAAA,EACE,MAAO,CAAA,MAAA,GAAS,WAAc,GAAA,QAAA,CAAA,gEAAA,CAAA;AAAA,KAElC,CAAA;AAAA,GACF;AAEA,EAAM,MAAA,aAAA,GAAgB,MAAO,CAAA,SAAA,CAAU,WAAY,EAAA,CAAA;AACnD,EAAM,MAAA,mBAAA,GAAsB,OAAO,SAAU,CAAA,QAAA,CAAA;AAE7C,EAAM,MAAA,QAAA,GAAW,QAAQ,GAAI,CAAA,CAAC,SAAS,IAAIK,WAAA,CAAQ,IAAI,CAAC,CAAA,CAAA;AACxD,EAAM,MAAA,CAAC,OAAO,CAAI,GAAA,QAAA,CAAA;AAClB,EAAM,MAAA,aAAA,GAAgB,QAAQ,MAAU,IAAA,QAAA,CAAA;AAExC,EAAM,MAAA,GAAA,GAAMf,4BAAsB,CAAA,MAAA,EAAQ,aAAa,CAAA,CAAA;AAEvD,EAAA,MAAM,IAAO,GAAA,MAAMgB,qBAAe,CAAA,GAAA,EAAK,SAAS,MAAM,CAAA,CAAA;AAEtD,EAAA,MAAM,EAAE,UAAY,EAAA,KAAA,EAAU,GAAA,qBAAA,CAAsB,MAAM,MAAM,CAAA,CAAA;AAEhE,EAAM,MAAA,qBAAA,GAAwB,EAAE,IAAA,EAAM,IAAc,EAAA,CAAA;AACpD,EAAA,MAAM,oBAIA,EAAC,CAAA;AAEP,EAAA,MAAM,SAA2B,EAAC,CAAA;AAClC,EAAA,MAAM,aAA4B,EAAC,CAAA;AACnC,EAAA,MAAM,UAA8B,EAAC,CAAA;AAErC,EAAI,IAAA,UAAA,CAAA;AACJ,EAAA,KAAA,MAAW,OAAO,IAAM,EAAA;AACtB,IAAA,QAAQ,IAAI,IAAM;AAAA,MAChB,KAAK,OAAS,EAAA;AACZ,QAAA,MAAM,KAAQ,GAAA,eAAA;AAAA,UACZ,UAAA;AAAA,UACA,KAAA;AAAA,UACA,GAAA;AAAA,UACA,aAAA;AAAA,UACA,mBAAA;AAAA,SACF,CAAA;AACA,QAAO,MAAA,CAAA,KAAA,CAAM,GAAG,CAAI,GAAA,KAAA,CAAA;AACpB,QAAA,IAAI,CAAC,UAAA;AAAY,UAAa,UAAA,GAAA,KAAA,CAAA;AAC9B,QAAA,iBAAA,CAAkB,IAAK,CAAA;AAAA,UACrB,KAAM,CAAA,IAAA;AAAA,UACN,KAAM,CAAA,OAAA;AAAA,UACN,qBAAA;AAAA,SACD,CAAA,CAAA;AACD,QAAA,MAAA;AAAA,OACF;AAAA,MACA,KAAK,WAAa,EAAA;AAChB,QAAA,UAAA,CAAW,IAAK,CAAA;AAAA,UACd,IAAA,EAAM,IAAI,MAAS,GAAA,CAAA,EAAG,IAAI,MAAU,CAAA,CAAA,EAAA,GAAA,CAAI,SAAS,GAAI,CAAA,IAAA;AAAA,UACrD,SAAS,GAAI,CAAA,OAAA;AAAA,SACd,CAAA,CAAA;AACD,QAAA,MAAA;AAAA,OACF;AAAA,MACA,KAAK,QAAU,EAAA;AACb,QAAA,OAAA,CAAQ,KAAK,GAAG,CAAA,CAAA;AAChB,QAAA,MAAA;AAAA,OACF;AAAA,KACF;AAAA,GACF;AAEA,EAAA,IAAI,CAAC,UAAc,IAAA,CAAC,WAAW,MAAU,IAAA,CAAC,QAAQ,MAAQ,EAAA;AACxD,IAAA,MAAM,QAAQ,KAAM,EAAA,CAAA;AACpB,IAAA,OAAA;AAAA,GACF;AAEA,EAAA,IAAI,SAAS,IAAK,CAAA,OAAA,CAAQ,MAAO,CAAA,QAAA,EAAU,OAAO,MAAM,CAAA,CAAA;AACxD,EAAI,IAAA,CAAC,MAAO,CAAA,QAAA,CAAS,KAAK,CAAA;AAAG,IAAU,MAAA,IAAA,KAAA,CAAA;AACvC,EAAA,MAAM,UAAU,MAAM,sBAAA;AAAA,IACpB,MAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,GACF,CAAA;AACA,EAAI,IAAA,OAAA;AAAS,IAAA,iBAAA,CAAkB,IAAK,CAAA,CAAC,MAAQ,EAAA,OAAO,CAAC,CAAA,CAAA;AAErD,EAAA,IAAI,UAAY,EAAA;AACd,IAAM,MAAA,EAAA,CAAG,KAAM,CAAA,IAAA,CAAK,OAAQ,CAAA,UAAA,CAAW,IAAI,CAAG,EAAA,EAAE,SAAW,EAAA,IAAA,EAAM,CAAA,CAAA;AAAA,GACnE;AAEA,EAAA,MAAM,OAAQ,CAAA,GAAA;AAAA,IACZ,iBAAkB,CAAA,GAAA;AAAA,MAAI,CAAC,CAACX,KAAMY,EAAAA,QAAAA,EAASC,QAAO,CAAA,KAC5C,EAAG,CAAA,SAAA,CAAUb,KAAMY,EAAAA,QAAAA,EAASC,QAAO,CAAA,CAAE,KAAK,MAAM;AAjHtD,QAAA,IAAA,EAAA,CAAA;AAkHQ,QAAA,CAAA,EAAA,GAAA,MAAA,CAAO,MAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAe,GAAI,CAAA,CAAA,QAAA,EAAWC,qBAAUd,KAAI,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,OAC7C,CAAA;AAAA,KACH;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,OAAU,GAAA,MAAMJ,sBAAgB,CAAA,IAAI,MAAM,CAAA,CAAA;AAChD,EAAM,MAAA,QAAA,CAAS,SAAS,MAAQ,EAAA,CAAC,MAAM,CAAG,EAAA,EAAE,OAAS,EAAA,OAAA,EAAS,CAAA,CAAA;AAG9D,EAAA,MAAM,OAAQ,CAAA,GAAA;AAAA,IACZ,QAAA,CAAS,GAAI,CAAA,OAAOmB,QAAY,KAAA;AAC9B,MAAA,MAAM,aAAgBA,GAAAA,QAAAA,CAAAA;AACtB,MAAA,aAAA,CAAc,eAAeA,QAAQ,CAAA,MAAA,CAAA;AACrC,MAAA,MAAMC,0BAAoB,CAAA,aAAA,EAAe,OAAS,EAAA,SAAA,EAAW,MAAM,CAAA,CAAA;AACnE,MAAA,MAAMD,SAAQ,KAAM,EAAA,CAAA;AAAA,KACrB,CAAA;AAAA,GACH,CAAA;AACF,CAAA;;AC7HAE,qBAAe,CAAA,CAAA,GAAIA,sBAAe,QAAW,GAAA;AAAA,EAC3C,GAAK,EAAA,QAAA;AAAA,EACL,IAAM,EAAA,qCAAA;AAAA,EACN,aAAe,EAAA;AAAA,IACb,cAAgB,EAAA,oCAAA;AAAA,IAChB,gBAAkB,EAAA,yBAAA;AAAA,IAClB,EAAI,EAAA,sBAAA;AAAA,IACJ,mBAAqB,EAAA,iCAAA;AAAA,GACvB;AAAA,EACA,SAAW,EAAA,OAAA;AACb,CAAA,CAAA;AAEAA,qBAAA,CAAe,KAAK,GAAM,GAAA,IAAA,CAAA;AAC1BA,qBAAA,CAAe,KAAK,IAClB,GAAA,8DAAA;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"migrations.js","sources":["../src/migrations/generate/generators/generators.utils.ts","../src/migrations/generate/generators/schemas.generator.ts","../src/migrations/generate/generators/extensions.generator.ts","../src/migrations/generate/generators/columns.generator.ts","../src/migrations/generate/generators/domains.generator.ts","../src/migrations/generate/generators/enums.generator.ts","../src/migrations/generate/generators/primaryKey.generator.ts","../src/migrations/generate/generators/indexes.generator.ts","../src/migrations/generate/generators/foreignKeys.generator.ts","../src/migrations/generate/generators/checks.generator.ts","../src/migrations/generate/generators/tables.generator.ts","../src/migrations/generate/composeMigration.ts","../src/migrations/generate/verifyMigration.ts","../src/migrations/generate/reportGeneratedMigration.ts","../src/migrations/generate/generate.ts","../src/migrations/pull/appCodeGenerators/tables.appCodeGenerator.ts","../src/migrations/pull/appCodeGenerators/dbFile.appCodeGenerator.ts","../src/migrations/pull/pull.ts","../src/migrations/patchRakeDb.ts"],"sourcesContent":["import { RakeDbAst, promptSelect, colors } from 'rake-db';\nimport { RawSQLBase } from 'orchid-core';\nimport { Adapter } from 'pqb';\nimport { AbortSignal } from '../generate';\n\nexport interface CompareExpression {\n compare: {\n inDb: string;\n inCode: (string | RawSQLBase)[];\n }[];\n\n handle(index?: number): void;\n}\n\nexport interface TableExpression extends CompareExpression {\n source: string;\n}\n\nexport const compareSqlExpressions = async (\n tableExpressions: TableExpression[],\n adapter: Adapter,\n) => {\n if (tableExpressions.length) {\n let id = 1;\n await Promise.all(\n tableExpressions.map(async ({ source, compare, handle }) => {\n const viewName = `orchidTmpView${id++}`;\n const values: unknown[] = [];\n try {\n const sql = `CREATE TEMPORARY VIEW ${viewName} AS (SELECT ${compare\n .map(\n ({ inDb, inCode }, i) =>\n `${inDb} AS \"*inDb-${i}*\", ${inCode\n .map(\n (s, j) =>\n `(${\n typeof s === 'string' ? s : s.toSQL({ values })\n }) \"*inCode-${i}-${j}*\"`,\n )\n .join(', ')}`,\n )\n .join(', ')} FROM ${source})`;\n await adapter.query({ text: sql, values });\n } catch (err) {\n handle();\n return;\n }\n\n const {\n rows: [{ v }],\n } = await adapter.query<{ v: string }>(\n `SELECT pg_get_viewdef('${viewName}') v`,\n );\n\n await adapter.query(`DROP VIEW ${viewName}`);\n\n let pos = 7;\n const rgx = /\\s+AS\\s+\"\\*(inDb-\\d+|inCode-\\d+-\\d+)\\*\",?/g;\n let match;\n let inDb = '';\n let codeI = 0;\n const matches = compare[0].inCode.map(() => true);\n while ((match = rgx.exec(v))) {\n const sql = v.slice(pos, rgx.lastIndex - match[0].length).trim();\n const arr = match[1].split('-');\n if (arr.length === 2) {\n inDb = sql;\n codeI = 0;\n } else {\n if (inDb !== sql) {\n matches[codeI] = false;\n }\n codeI++;\n }\n pos = rgx.lastIndex;\n }\n\n const firstMatching = matches.indexOf(true);\n handle(firstMatching === -1 ? undefined : firstMatching);\n }),\n );\n }\n};\n\nexport const promptCreateOrRename = (\n kind: string,\n name: string,\n drop: string[],\n verifying: boolean | undefined,\n): Promise<number> => {\n if (verifying) throw new AbortSignal();\n\n let hintPos = name.length + 4;\n for (const from of drop) {\n const value = from.length + 8 + name.length;\n if (value > hintPos) hintPos = value;\n }\n\n let max = 0;\n const add = name.length + 3;\n for (const name of drop) {\n if (name.length + add > max) {\n max = name.length + add;\n }\n }\n\n const renameMessage = `rename ${kind}`;\n\n return promptSelect({\n message: `Create or rename ${colors.blueBold(\n name,\n )} ${kind} from another ${kind}?`,\n options: [\n `${colors.greenBold('+')} ${name} ${colors.pale(\n `create ${kind}`.padStart(\n hintPos + renameMessage.length - name.length - 4,\n ' ',\n ),\n )}`,\n ...drop.map(\n (d) =>\n `${colors.yellowBold('~')} ${d} ${colors.yellowBold(\n '=>',\n )} ${name} ${colors.pale(\n renameMessage.padStart(\n hintPos + renameMessage.length - d.length - name.length - 8,\n ' ',\n ),\n )}`,\n ),\n ],\n });\n};\n\nexport const checkForColumnAddOrDrop = (\n shape: RakeDbAst.ChangeTableShape,\n key: string,\n) => {\n const item = shape[key];\n if (item) {\n return (\n item &&\n (Array.isArray(item) || item.type === 'add' || item.type === 'drop')\n );\n }\n\n for (const k in shape) {\n const item = shape[k];\n if (\n Array.isArray(item)\n ? item.some(\n (item) =>\n (item.type === 'add' || item.type === 'drop') &&\n item.item.data.name === key,\n )\n : (item.type === 'add' || item.type === 'drop') &&\n item.item.data.name === key\n ) {\n return true;\n }\n }\n\n return false;\n};\n","import { RakeDbAst, IntrospectedStructure } from 'rake-db';\nimport { promptCreateOrRename } from './generators.utils';\n\nexport const processSchemas = async (\n ast: RakeDbAst[],\n schemas: Set<string>,\n dbStructure: IntrospectedStructure,\n verifying: boolean | undefined,\n): Promise<void> => {\n const createSchemas: string[] = [];\n const dropSchemas: string[] = [];\n\n for (const schema of schemas) {\n if (!dbStructure.schemas.includes(schema)) {\n createSchemas.push(schema);\n }\n }\n\n for (const schema of dbStructure.schemas) {\n if (!schemas.has(schema) && schema !== 'public') {\n dropSchemas.push(schema);\n }\n }\n\n for (const schema of createSchemas) {\n if (dropSchemas.length) {\n const index = await promptCreateOrRename(\n 'schema',\n schema,\n dropSchemas,\n verifying,\n );\n if (index) {\n const from = dropSchemas[index - 1];\n dropSchemas.splice(index - 1, 1);\n\n renameSchemaInStructures(dbStructure.tables, from, schema);\n renameSchemaInStructures(dbStructure.views, from, schema);\n renameSchemaInStructures(dbStructure.indexes, from, schema);\n renameSchemaInStructures(dbStructure.constraints, from, schema);\n renameSchemaInStructures(dbStructure.triggers, from, schema);\n renameSchemaInStructures(dbStructure.enums, from, schema);\n renameSchemaInStructures(dbStructure.domains, from, schema);\n renameSchemaInStructures(dbStructure.collations, from, schema);\n\n for (const table of dbStructure.tables) {\n for (const column of table.columns) {\n if (column.typeSchema === from) {\n column.typeSchema = schema;\n }\n }\n }\n\n ast.push({\n type: 'renameSchema',\n from,\n to: schema,\n });\n continue;\n }\n }\n\n ast.push({\n type: 'schema',\n action: 'create',\n name: schema,\n });\n }\n\n for (const schema of dropSchemas) {\n ast.push({\n type: 'schema',\n action: 'drop',\n name: schema,\n });\n }\n};\n\nconst renameSchemaInStructures = (\n items: { schemaName: string }[],\n from: string,\n to: string,\n) => {\n for (const item of items) {\n if (item.schemaName === from) {\n item.schemaName = to;\n }\n }\n};\n","import {\n RakeDbAst,\n IntrospectedStructure,\n getSchemaAndTableFromName,\n} from 'rake-db';\nimport { DbExtension } from 'pqb';\n\ninterface Extension {\n schema?: string;\n name: string;\n version?: string;\n}\n\nexport const processExtensions = (\n ast: RakeDbAst[],\n dbStructure: IntrospectedStructure,\n currentSchema: string,\n extensions?: DbExtension[],\n) => {\n const codeExtensions = extensions?.map((ext): Extension => {\n const [schema, name] = getSchemaAndTableFromName(ext.name);\n return { schema, name, version: ext.version };\n });\n\n for (const dbExt of dbStructure.extensions) {\n if (codeExtensions) {\n let found = false;\n for (let i = 0; i < codeExtensions.length; i++) {\n const codeExt = codeExtensions[i];\n if (\n dbExt.name === codeExt.name &&\n dbExt.schemaName === (codeExt.schema ?? currentSchema) &&\n (!codeExt.version || codeExt.version === dbExt.version)\n ) {\n found = true;\n codeExtensions.splice(i, 1);\n break;\n }\n }\n\n if (found) continue;\n }\n\n ast.push({\n type: 'extension',\n action: 'drop',\n schema: dbExt.schemaName === currentSchema ? undefined : dbExt.schemaName,\n name: dbExt.name,\n version: dbExt.version,\n });\n }\n\n if (codeExtensions?.length) {\n ast.push(\n ...codeExtensions.map((ext) => ({\n type: 'extension' as const,\n action: 'create' as const,\n ...ext,\n })),\n );\n }\n};\n","import {\n RakeDbAst,\n dbColumnToAst,\n DbStructureDomainsMap,\n getDbTableColumnsChecks,\n instantiateDbColumn,\n StructureToAstCtx,\n DbStructure,\n IntrospectedStructure,\n encodeColumnDefault,\n concatSchemaAndName,\n getSchemaAndTableFromName,\n promptSelect,\n colors,\n AnyRakeDbConfig,\n} from 'rake-db';\nimport {\n Adapter,\n ArrayColumn,\n ColumnType,\n DomainColumn,\n EnumColumn,\n} from 'pqb';\nimport { promptCreateOrRename } from './generators.utils';\nimport {\n ColumnTypeBase,\n deepCompare,\n RecordUnknown,\n toSnakeCase,\n} from 'orchid-core';\nimport { ChangeTableData, CompareSql } from './tables.generator';\nimport { AbortSignal } from '../generate';\n\nexport interface TypeCastsCache {\n value?: Map<string, Set<string>>;\n}\n\ntype ColumnsToChange = Map<\n string,\n { key: string; dbName: string; column: ColumnType }\n>;\n\nexport const processColumns = async (\n adapter: Adapter,\n config: AnyRakeDbConfig,\n structureToAstCtx: StructureToAstCtx,\n dbStructure: IntrospectedStructure,\n domainsMap: DbStructureDomainsMap,\n changeTableData: ChangeTableData,\n ast: RakeDbAst[],\n currentSchema: string,\n compareSql: CompareSql,\n typeCastsCache: TypeCastsCache,\n verifying: boolean | undefined,\n) => {\n const { dbTable } = changeTableData;\n const dbColumns = Object.fromEntries(\n dbTable.columns.map((column) => [column.name, column]),\n );\n\n const { columnsToAdd, columnsToDrop, columnsToChange } = groupColumns(\n structureToAstCtx,\n dbStructure,\n domainsMap,\n dbColumns,\n changeTableData,\n );\n\n await addOrRenameColumns(\n config,\n dbStructure,\n changeTableData,\n columnsToAdd,\n columnsToDrop,\n columnsToChange,\n verifying,\n );\n\n await changeColumns(\n adapter,\n config,\n structureToAstCtx,\n dbStructure,\n domainsMap,\n ast,\n currentSchema,\n dbColumns,\n columnsToChange,\n compareSql,\n changeTableData,\n typeCastsCache,\n verifying,\n );\n\n dropColumns(changeTableData, columnsToDrop);\n};\n\ntype KeyAndColumn = { key: string; column: ColumnType };\n\nconst groupColumns = (\n structureToAstCtx: StructureToAstCtx,\n dbStructure: IntrospectedStructure,\n domainsMap: DbStructureDomainsMap,\n dbColumns: { [K: string]: DbStructure.Column },\n changeTableData: ChangeTableData,\n): {\n columnsToAdd: KeyAndColumn[];\n columnsToDrop: KeyAndColumn[];\n columnsToChange: ColumnsToChange;\n} => {\n const columnsToAdd: { key: string; column: ColumnType }[] = [];\n const columnsToDrop: { key: string; column: ColumnType }[] = [];\n const columnsToChange: ColumnsToChange = new Map();\n const columnsToChangeByDbName = new Map<string, true>();\n\n const { codeTable, dbTable, dbTableData } = changeTableData;\n const checks = getDbTableColumnsChecks(changeTableData.dbTableData);\n\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as ColumnType;\n // skip virtual columns\n if (!column.dataType) continue;\n\n const name = column.data.name ?? key;\n if (dbColumns[name]) {\n columnsToChange.set(key, { key, dbName: name, column });\n columnsToChangeByDbName.set(name, true);\n } else {\n columnsToAdd.push({ key, column });\n }\n }\n\n for (const name in dbColumns) {\n if (columnsToChangeByDbName.has(name)) continue;\n\n const [key, column] = dbColumnToAst(\n structureToAstCtx,\n dbStructure,\n domainsMap,\n dbTable.name,\n dbColumns[name],\n dbTable,\n dbTableData,\n checks,\n );\n\n columnsToDrop.push({ key, column });\n }\n\n return {\n columnsToAdd,\n columnsToDrop,\n columnsToChange,\n };\n};\n\nconst addOrRenameColumns = async (\n config: AnyRakeDbConfig,\n dbStructure: IntrospectedStructure,\n {\n dbTableData,\n schema,\n changeTableAst: { name: tableName, shape },\n }: ChangeTableData,\n columnsToAdd: KeyAndColumn[],\n columnsToDrop: KeyAndColumn[],\n columnsToChange: ColumnsToChange,\n verifying: boolean | undefined,\n) => {\n for (const { key, column } of columnsToAdd) {\n if (columnsToDrop.length) {\n const codeName = column.data.name ?? key;\n const index = await promptCreateOrRename(\n 'column',\n codeName,\n columnsToDrop.map((x) => x.key),\n verifying,\n );\n if (index) {\n const drop = columnsToDrop[index - 1];\n columnsToDrop.splice(index - 1, 1);\n\n const from = drop.column.data.name ?? drop.key;\n columnsToChange.set(from, {\n key,\n dbName: from,\n column: column.name(codeName),\n });\n\n const to = config.snakeCase ? toSnakeCase(key) : key;\n\n if (dbTableData.primaryKey) {\n renameColumn(dbTableData.primaryKey.columns, from, to);\n }\n\n for (const index of dbTableData.indexes) {\n for (const column of index.columns) {\n if ('column' in column && column.column === from) {\n column.column = to;\n }\n }\n }\n\n for (const c of dbTableData.constraints) {\n if (c.check?.columns) {\n renameColumn(c.check.columns, from, to);\n }\n if (c.references) {\n renameColumn(c.references.columns, from, to);\n }\n }\n\n for (const c of dbStructure.constraints) {\n if (\n c.references &&\n c.references.foreignSchema === schema &&\n c.references.foreignTable === tableName\n ) {\n renameColumn(c.references.foreignColumns, from, to);\n }\n }\n\n continue;\n }\n }\n\n shape[key] = {\n type: 'add',\n item: column,\n };\n }\n};\n\nconst dropColumns = (\n { changeTableAst: { shape } }: ChangeTableData,\n columnsToDrop: KeyAndColumn[],\n) => {\n for (const { key, column } of columnsToDrop) {\n shape[key] = {\n type: 'drop',\n item: column,\n };\n }\n};\n\nconst changeColumns = async (\n adapter: Adapter,\n config: AnyRakeDbConfig,\n structureToAstCtx: StructureToAstCtx,\n dbStructure: IntrospectedStructure,\n domainsMap: DbStructureDomainsMap,\n ast: RakeDbAst[],\n currentSchema: string,\n dbColumns: { [K: string]: DbStructure.Column },\n columnsToChange: ColumnsToChange,\n compareSql: CompareSql,\n changeTableData: ChangeTableData,\n typeCastsCache: TypeCastsCache,\n verifying: boolean | undefined,\n) => {\n for (const [\n key,\n { key: codeKey, dbName, column: codeColumn },\n ] of columnsToChange) {\n const dbColumnStructure = dbColumns[dbName];\n\n const dbColumn = instantiateDbColumn(\n structureToAstCtx,\n dbStructure,\n domainsMap,\n dbColumnStructure,\n );\n\n const action = await compareColumns(\n adapter,\n domainsMap,\n ast,\n currentSchema,\n compareSql,\n changeTableData,\n typeCastsCache,\n verifying,\n key,\n dbName,\n dbColumn,\n codeColumn,\n );\n\n if (action === 'change') {\n changeColumn(changeTableData, key, dbName, dbColumn, codeColumn);\n } else if (action === 'recreate') {\n changeTableData.changeTableAst.shape[key] = [\n {\n type: 'drop',\n item: dbColumn,\n },\n {\n type: 'add',\n item: codeColumn,\n },\n ];\n } else if (action !== 'recreate') {\n const to = codeColumn.data.name ?? codeKey;\n if (dbName !== to) {\n changeTableData.changeTableAst.shape[\n config.snakeCase\n ? dbName === toSnakeCase(codeKey)\n ? codeKey\n : dbName\n : dbName\n ] = {\n type: 'rename',\n name: config.snakeCase\n ? to === toSnakeCase(codeKey)\n ? codeKey\n : to\n : to,\n };\n }\n }\n }\n};\n\nconst compareColumns = async (\n adapter: Adapter,\n domainsMap: DbStructureDomainsMap,\n ast: RakeDbAst[],\n currentSchema: string,\n compareSql: CompareSql,\n changeTableData: ChangeTableData,\n typeCastsCache: TypeCastsCache,\n verifying: boolean | undefined,\n key: string,\n dbName: string,\n dbColumn: ColumnType,\n codeColumn: ColumnType,\n): Promise<'change' | 'recreate' | undefined> => {\n const dbType = getColumnDbType(dbColumn, currentSchema);\n const codeType = getColumnDbType(codeColumn, currentSchema);\n\n if (dbColumn instanceof ArrayColumn && codeColumn instanceof ArrayColumn) {\n dbColumn = dbColumn.data.item;\n codeColumn = codeColumn.data.item;\n }\n\n if (dbType !== codeType) {\n let typeCasts = typeCastsCache.value;\n if (!typeCasts) {\n const { rows } = await adapter.arrays(`SELECT s.typname, t.typname\nFROM pg_cast\nJOIN pg_type AS s ON s.oid = castsource\nJOIN pg_type AS t ON t.oid = casttarget`);\n\n const directTypeCasts = new Map<string, Set<string>>();\n for (const [source, target] of rows) {\n const set = directTypeCasts.get(source);\n if (set) {\n set.add(target);\n } else {\n directTypeCasts.set(source, new Set([target]));\n }\n }\n\n typeCasts = new Map<string, Set<string>>();\n for (const [type, directSet] of directTypeCasts.entries()) {\n const set = new Set<string>(directSet);\n typeCasts.set(type, set);\n\n for (const subtype of directSet) {\n const subset = directTypeCasts.get(subtype);\n if (subset) {\n for (const type of subset) {\n set.add(type);\n }\n }\n }\n }\n\n typeCastsCache.value = typeCasts;\n }\n\n const dbBaseType =\n dbColumn instanceof DomainColumn\n ? domainsMap[dbColumn.dataType]?.dataType\n : dbType;\n\n const codeBaseType =\n codeColumn instanceof DomainColumn\n ? domainsMap[codeColumn.dataType]?.dataType\n : codeType;\n\n if (!typeCasts.get(dbBaseType)?.has(codeBaseType)) {\n if (\n !(dbColumn instanceof EnumColumn) ||\n !(codeColumn instanceof EnumColumn) ||\n !deepCompare(dbColumn.options, codeColumn.options)\n ) {\n if (verifying) throw new AbortSignal();\n\n const tableName = concatSchemaAndName(changeTableData.changeTableAst);\n const abort = await promptSelect({\n message: `Cannot cast type of ${tableName}'s column ${key} from ${dbType} to ${codeType}`,\n options: [\n `${colors.yellowBold(\n `-/+`,\n )} recreate the column, existing data will be ${colors.red(\n 'lost',\n )}`,\n `write migration manually`,\n ],\n });\n if (abort) {\n throw new AbortSignal();\n }\n\n dbColumn.data.name = codeColumn.data.name;\n return 'recreate';\n }\n }\n\n return 'change';\n }\n\n const dbData = dbColumn.data as unknown as RecordUnknown;\n const codeData = codeColumn.data as unknown as RecordUnknown;\n\n for (const key of ['isNullable', 'comment']) {\n if (dbData[key] !== codeData[key]) {\n return 'change';\n }\n }\n\n for (const key of [\n 'maxChars',\n 'collation',\n 'compression',\n 'numericPrecision',\n 'numericScale',\n 'dateTimePrecision',\n ]) {\n // Check if key in codeData so that default precision/scale values for such columns as integer aren't counted.\n // If column supports precision/scale, it should have it listed in the data, even if it's undefined.\n if (key in codeData && dbData[key] !== codeData[key]) {\n return 'change';\n }\n }\n\n if (\n !deepCompare(\n dbData.identity,\n codeData.identity\n ? {\n always: false,\n start: 1,\n increment: 1,\n cache: 1,\n cycle: false,\n ...(codeData.identity ?? {}),\n }\n : undefined,\n )\n ) {\n return 'change';\n }\n\n if (\n dbData.default !== undefined &&\n dbData.default !== null &&\n codeData.default !== undefined &&\n codeData.default !== null\n ) {\n const valuesBeforeLen = compareSql.values.length;\n const dbDefault = encodeColumnDefault(\n dbData.default,\n compareSql.values,\n dbColumn,\n ) as string;\n const dbValues = compareSql.values.slice(valuesBeforeLen);\n\n const codeDefault = encodeColumnDefault(\n codeData.default,\n compareSql.values,\n codeColumn,\n ) as string;\n const codeValues = compareSql.values.slice(valuesBeforeLen);\n\n if (\n dbValues.length !== codeValues.length ||\n (dbValues.length &&\n JSON.stringify(dbValues) !== JSON.stringify(codeValues))\n ) {\n compareSql.values.length = valuesBeforeLen;\n return 'change';\n } else if (dbDefault !== codeDefault && dbDefault !== `(${codeDefault})`) {\n compareSql.expressions.push({\n inDb: dbDefault,\n inCode: codeDefault,\n change: () => {\n changeColumn(changeTableData, key, dbName, dbColumn, codeColumn);\n if (!changeTableData.pushedAst) {\n changeTableData.pushedAst = true;\n ast.push(changeTableData.changeTableAst);\n }\n },\n });\n }\n }\n\n return;\n};\n\nconst changeColumn = (\n changeTableData: ChangeTableData,\n key: string,\n dbName: string,\n dbColumn: ColumnType,\n codeColumn: ColumnType,\n) => {\n dbColumn.data.as = codeColumn.data.as = undefined;\n\n const simpleCodeColumn = Object.create(codeColumn);\n simpleCodeColumn.data = {\n ...codeColumn.data,\n primaryKey: undefined,\n indexes: undefined,\n foreignKeys: undefined,\n check: undefined,\n };\n\n changeTableData.changingColumns[dbName] = {\n from: dbColumn,\n to: simpleCodeColumn,\n };\n\n changeTableData.changeTableAst.shape[key] = {\n type: 'change',\n from: { column: dbColumn },\n to: { column: simpleCodeColumn },\n };\n};\n\nexport const getColumnDbType = (\n column: ColumnTypeBase,\n currentSchema: string,\n) => {\n if (column instanceof EnumColumn) {\n const [schema = currentSchema, name] = getSchemaAndTableFromName(\n column.enumName,\n );\n return (column.enumName = `${schema}.${name}`);\n } else if (column instanceof ArrayColumn) {\n return column.data.item.dataType + '[]'.repeat(column.data.arrayDims);\n } else {\n return column.dataType;\n }\n};\n\nconst renameColumn = (columns: string[], from: string, to: string) => {\n for (let i = 0; i < columns.length; i++) {\n if (columns[i] === from) {\n columns[i] = to;\n }\n }\n};\n","import { Adapter, ArrayColumn, ColumnType, RawSQL } from 'pqb';\nimport {\n RakeDbAst,\n getSchemaAndTableFromName,\n DbStructure,\n IntrospectedStructure,\n DbStructureDomainsMap,\n instantiateDbColumn,\n StructureToAstCtx,\n} from 'rake-db';\nimport {\n ColumnDataCheckBase,\n deepCompare,\n TemplateLiteralArgs,\n} from 'orchid-core';\nimport { getColumnDbType } from './columns.generator';\nimport {\n CompareExpression,\n compareSqlExpressions,\n TableExpression,\n} from './generators.utils';\n\ninterface ComparableDomainCompare\n extends Omit<DbStructure.Domain, 'schemaName' | 'name'> {\n hasDefault: boolean;\n hasCheck: boolean;\n}\n\ninterface ComparableDomain {\n schemaName: string;\n name: string;\n column: ColumnType;\n compare: ComparableDomainCompare;\n}\n\nexport interface CodeDomain {\n schemaName: string;\n name: string;\n column: ColumnType;\n}\n\nexport const processDomains = async (\n ast: RakeDbAst[],\n adapter: Adapter,\n structureToAstCtx: StructureToAstCtx,\n domainsMap: DbStructureDomainsMap,\n dbStructure: IntrospectedStructure,\n currentSchema: string,\n domains: CodeDomain[],\n) => {\n const codeDomains: ComparableDomain[] = [];\n if (domains) {\n for (const { schemaName, name, column } of domains) {\n codeDomains.push(\n makeComparableDomain(currentSchema, schemaName, name, column),\n );\n }\n }\n\n const tableExpressions: TableExpression[] = [];\n const holdCodeDomains = new Set<ComparableDomain>();\n\n for (const domain of dbStructure.domains) {\n const dbColumn = instantiateDbColumn(\n structureToAstCtx,\n dbStructure,\n domainsMap,\n {\n // not destructuring `domain` because need to ignore `numericPrecision`, `numericScale`, etc.,\n // that are loaded from db, but not defined in the code\n schemaName: domain.typeSchema,\n tableName: 'N/A',\n name: domain.name,\n typeSchema: domain.typeSchema,\n type: domain.type,\n arrayDims: domain.arrayDims,\n default: domain.default,\n isNullable: domain.isNullable,\n collate: domain.collate,\n maxChars: domain.maxChars,\n typmod: -1,\n },\n );\n\n if (domain.check) {\n dbColumn.data.check = {\n sql: new RawSQL([[domain.check]] as unknown as TemplateLiteralArgs),\n };\n }\n\n const dbDomain = makeComparableDomain(\n currentSchema,\n domain.schemaName,\n domain.name,\n dbColumn,\n );\n\n const found = codeDomains.filter((codeDomain) =>\n deepCompare(dbDomain.compare, codeDomain.compare),\n );\n\n if ((domain.default || domain.check) && found.length) {\n for (const codeDomain of found) {\n holdCodeDomains.add(codeDomain);\n }\n\n const compare: CompareExpression['compare'] = [];\n pushCompare(compare, domain, found, 'default');\n pushCompare(compare, domain, found, 'check');\n\n const source = `(VALUES (NULL::${getColumnDbType(\n dbColumn,\n currentSchema,\n )})) t(value)`;\n\n tableExpressions.push({\n compare,\n source,\n handle(index) {\n const codeDomain = index === undefined ? undefined : found[index];\n if (!codeDomain) {\n ast.push(dropAst(dbDomain));\n } else {\n holdCodeDomains.delete(codeDomain);\n }\n },\n });\n } else if (found.length) {\n let i = codeDomains.findIndex(\n (codeDomain) =>\n codeDomain.name === dbDomain.name &&\n codeDomain.schemaName === dbDomain.schemaName,\n );\n if (i === -1) {\n i = 0;\n const first = found[0];\n ast.push({\n type: 'renameType',\n kind: 'DOMAIN',\n fromSchema: dbDomain.schemaName,\n from: dbDomain.name,\n toSchema: first.schemaName,\n to: first.name,\n });\n }\n\n codeDomains.splice(i, 1);\n } else {\n ast.push(dropAst(dbDomain));\n }\n }\n\n for (const codeDomain of codeDomains) {\n if (!holdCodeDomains.has(codeDomain)) {\n ast.push(createAst(codeDomain));\n }\n }\n\n if (tableExpressions.length) {\n await compareSqlExpressions(tableExpressions, adapter);\n\n if (holdCodeDomains.size) {\n for (const codeDomain of holdCodeDomains.keys()) {\n ast.push(createAst(codeDomain));\n }\n }\n }\n};\n\nconst makeComparableDomain = (\n currentSchema: string,\n schemaName: string,\n name: string,\n column: ColumnType,\n): ComparableDomain => {\n let arrayDims = 0;\n const isNullable = column.data.isNullable ?? false;\n let inner = column;\n while (inner instanceof ArrayColumn) {\n inner = inner.data.item;\n arrayDims++;\n }\n const fullType = getColumnDbType(inner, currentSchema);\n const [typeSchema = 'pg_catalog', type] = getSchemaAndTableFromName(fullType);\n\n return {\n schemaName,\n name,\n column,\n compare: {\n type,\n typeSchema,\n arrayDims,\n isNullable,\n maxChars: inner.data.maxChars,\n numericPrecision: inner.data.numericPrecision,\n numericScale: inner.data.numericScale,\n dateTimePrecision: inner.data.dateTimePrecision,\n collate: column.data.collate,\n hasDefault: column.data.default !== undefined,\n hasCheck: column.data.check !== undefined,\n },\n };\n};\n\nconst pushCompare = (\n compare: CompareExpression['compare'],\n domain: DbStructure.Domain,\n found: ComparableDomain[],\n key: 'default' | 'check',\n) => {\n const inDb = domain[key];\n if (inDb) {\n compare.push({\n inDb,\n inCode: found.map((codeDomain) => {\n const value = codeDomain.column.data[key];\n if ('sql' in (value as ColumnDataCheckBase)) {\n return (value as ColumnDataCheckBase).sql;\n }\n return value as string;\n }),\n });\n }\n};\n\nconst dropAst = (dbDomain: ComparableDomain): RakeDbAst.Domain => ({\n type: 'domain',\n action: 'drop',\n schema: dbDomain.schemaName,\n name: dbDomain.name,\n baseType: dbDomain.column,\n});\n\nconst createAst = (codeDomain: ComparableDomain): RakeDbAst.Domain => ({\n type: 'domain',\n action: 'create',\n schema: codeDomain.schemaName,\n name: codeDomain.name,\n baseType: codeDomain.column,\n});\n","import { DbStructure, IntrospectedStructure, RakeDbAst } from 'rake-db';\nimport { promptCreateOrRename } from './generators.utils';\n\nexport interface EnumItem {\n schema?: string;\n name: string;\n values: [string, ...string[]];\n}\n\nexport const processEnums = async (\n ast: RakeDbAst[],\n enums: Map<string, EnumItem>,\n dbStructure: IntrospectedStructure,\n currentSchema: string,\n verifying: boolean | undefined,\n): Promise<void> => {\n const createEnums: EnumItem[] = [];\n const dropEnums: DbStructure.Enum[] = [];\n\n for (const [, codeEnum] of enums) {\n const { schema = currentSchema, name } = codeEnum;\n const dbEnum = dbStructure.enums.find(\n (x) => x.schemaName === schema && x.name === name,\n );\n if (!dbEnum) {\n createEnums.push(codeEnum);\n }\n }\n\n for (const dbEnum of dbStructure.enums) {\n const codeEnum = enums.get(`${dbEnum.schemaName}.${dbEnum.name}`);\n if (codeEnum) {\n changeEnum(ast, dbEnum, codeEnum);\n continue;\n }\n\n const i = createEnums.findIndex((x) => x.name === dbEnum.name);\n if (i !== -1) {\n const codeEnum = createEnums[i];\n createEnums.splice(i, 1);\n const fromSchema = dbEnum.schemaName;\n const toSchema = codeEnum.schema ?? currentSchema;\n\n renameColumnsTypeSchema(dbStructure, fromSchema, toSchema);\n\n ast.push({\n type: 'renameType',\n kind: 'TYPE',\n fromSchema,\n from: dbEnum.name,\n toSchema,\n to: dbEnum.name,\n });\n\n changeEnum(ast, dbEnum, codeEnum);\n\n continue;\n }\n\n dropEnums.push(dbEnum);\n }\n\n for (const codeEnum of createEnums) {\n if (dropEnums.length) {\n const index = await promptCreateOrRename(\n 'enum',\n codeEnum.name,\n dropEnums.map((x) => x.name),\n verifying,\n );\n if (index) {\n const dbEnum = dropEnums[index - 1];\n dropEnums.splice(index - 1, 1);\n\n const fromSchema = dbEnum.schemaName;\n const from = dbEnum.name;\n const toSchema = codeEnum.schema ?? currentSchema;\n const to = codeEnum.name;\n\n if (fromSchema !== toSchema) {\n renameColumnsTypeSchema(dbStructure, fromSchema, toSchema);\n }\n\n for (const table of dbStructure.tables) {\n for (const column of table.columns) {\n if (column.type === from) {\n column.type = to;\n }\n }\n }\n\n ast.push({\n type: 'renameType',\n kind: 'TYPE',\n fromSchema,\n from,\n toSchema,\n to,\n });\n\n changeEnum(ast, dbEnum, codeEnum);\n\n continue;\n }\n }\n\n ast.push({\n type: 'enum',\n action: 'create',\n ...codeEnum,\n });\n }\n\n for (const dbEnum of dropEnums) {\n ast.push({\n type: 'enum',\n action: 'drop',\n schema: dbEnum.schemaName,\n name: dbEnum.name,\n values: dbEnum.values,\n });\n }\n};\n\nconst changeEnum = (\n ast: RakeDbAst[],\n dbEnum: DbStructure.Enum,\n codeEnum: EnumItem,\n) => {\n const { values: dbValues } = dbEnum;\n const { values: codeValues, schema, name } = codeEnum;\n\n if (dbValues.length < codeValues.length) {\n if (!dbValues.some((value, i) => value !== codeValues[i])) {\n ast.push({\n type: 'enumValues',\n action: 'add',\n schema,\n name,\n values: codeValues.slice(-(codeValues.length - dbValues.length)),\n });\n return;\n }\n } else if (dbValues.length > codeValues.length) {\n if (!codeValues.some((value, i) => value !== dbValues[i])) {\n ast.push({\n type: 'enumValues',\n action: 'drop',\n schema,\n name,\n values: dbValues.slice(-(dbValues.length - codeValues.length)),\n });\n return;\n }\n } else if (!dbValues.some((value, i) => value !== codeValues[i])) {\n return;\n }\n\n ast.push({\n type: 'changeEnumValues',\n schema,\n name,\n fromValues: dbValues,\n toValues: codeValues,\n });\n};\n\nconst renameColumnsTypeSchema = (\n dbStructure: IntrospectedStructure,\n from: string,\n to: string,\n) => {\n for (const table of dbStructure.tables) {\n for (const column of table.columns) {\n if (column.typeSchema === from) {\n column.typeSchema = to;\n }\n }\n }\n};\n","import { AnyRakeDbConfig } from 'rake-db';\nimport { ColumnType } from 'pqb';\nimport { ChangeTableData } from './tables.generator';\nimport { checkForColumnAddOrDrop } from './generators.utils';\nimport { toArray, toSnakeCase } from 'orchid-core';\n\nexport const processPrimaryKey = (\n config: AnyRakeDbConfig,\n changeTableData: ChangeTableData,\n) => {\n const { codeTable } = changeTableData;\n\n const columnsPrimaryKey: { key: string; name: string }[] = [];\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as ColumnType;\n if (column.data.primaryKey) {\n columnsPrimaryKey.push({ key, name: column.data.name ?? key });\n }\n }\n\n changePrimaryKey(config, columnsPrimaryKey, changeTableData);\n renamePrimaryKey(changeTableData);\n};\n\nconst changePrimaryKey = (\n config: AnyRakeDbConfig,\n columnsPrimaryKey: { key: string; name: string }[],\n {\n codeTable,\n dbTableData: { primaryKey: dbPrimaryKey },\n changeTableAst: { shape, add, drop },\n changingColumns,\n }: ChangeTableData,\n) => {\n const tablePrimaryKey = codeTable.internal.tableData.primaryKey;\n const primaryKey = [\n ...new Set([\n ...columnsPrimaryKey,\n ...((config.snakeCase\n ? tablePrimaryKey?.columns.map((key) => ({\n key,\n name: toSnakeCase(key),\n }))\n : tablePrimaryKey?.columns.map((key) => ({ key, name: key }))) ?? []),\n ]),\n ];\n\n if (\n dbPrimaryKey &&\n primaryKey.length === dbPrimaryKey.columns.length &&\n !primaryKey.some(\n ({ name }) => !dbPrimaryKey.columns.some((dbName) => name === dbName),\n )\n ) {\n if (primaryKey.length === 1) {\n const { key } = primaryKey[0];\n const changes = shape[key] && toArray(shape[key]);\n if (changes) {\n for (const change of changes) {\n if (change.type !== 'change') continue;\n\n if (change.from.column) {\n change.from.column.data.primaryKey = undefined;\n }\n\n if (change.to.column) {\n const column = Object.create(change.to.column);\n column.data = { ...column.data, primaryKey: undefined };\n change.to.column = column;\n }\n }\n }\n }\n return;\n }\n\n const toDrop = dbPrimaryKey?.columns.filter(\n (key) => !checkForColumnAddOrDrop(shape, key),\n );\n if (toDrop?.length) {\n if (toDrop.length === 1 && changingColumns[toDrop[0]]) {\n const column = changingColumns[toDrop[0]];\n column.from.data.primaryKey =\n dbPrimaryKey?.name ?? (true as unknown as string);\n } else {\n drop.primaryKey = { columns: toDrop, name: dbPrimaryKey?.name };\n }\n }\n\n const toAdd = primaryKey.filter(\n ({ key }) => !checkForColumnAddOrDrop(shape, key),\n );\n if (toAdd.length) {\n if (toAdd.length === 1 && changingColumns[toAdd[0].name]) {\n const column = changingColumns[toAdd[0].name];\n column.to.data.primaryKey =\n tablePrimaryKey?.name ?? (true as unknown as string);\n } else {\n add.primaryKey = {\n columns: toAdd.map((c) => c.key),\n name: tablePrimaryKey?.name,\n };\n }\n }\n};\n\nconst renamePrimaryKey = ({\n codeTable,\n dbTableData: { primaryKey: dbPrimaryKey },\n schema,\n delayedAst,\n}: ChangeTableData) => {\n const tablePrimaryKey = codeTable.internal.tableData.primaryKey;\n if (\n dbPrimaryKey &&\n tablePrimaryKey &&\n dbPrimaryKey?.name !== tablePrimaryKey?.name\n ) {\n delayedAst.push({\n type: 'renameTableItem',\n kind: 'CONSTRAINT',\n tableSchema: schema,\n tableName: codeTable.table,\n from: dbPrimaryKey.name ?? `${codeTable.table}_pkey`,\n to: tablePrimaryKey.name ?? `${codeTable}_pkey`,\n });\n }\n};\n","import { AnyRakeDbConfig, RakeDbAst, getIndexName, DbStructure } from 'rake-db';\nimport { ColumnType, SearchWeight, TableData } from 'pqb';\nimport {\n deepCompare,\n MaybeArray,\n RecordUnknown,\n toArray,\n toSnakeCase,\n} from 'orchid-core';\nimport { ChangeTableData } from './tables.generator';\nimport { checkForColumnAddOrDrop, CompareExpression } from './generators.utils';\n\ninterface CodeIndex extends TableData.Index {\n columnKeys: TableData.Index.ColumnOrExpressionOptions[];\n includeKeys?: MaybeArray<string>;\n}\n\ninterface ComparableIndex {\n name?: string;\n using?: string;\n unique?: boolean;\n include?: string[];\n nullsNotDistinct?: boolean;\n tablespace?: string;\n tsVector?: boolean;\n language?: string;\n languageColumn?: string;\n columns: {\n column?: string;\n collate?: string;\n opclass?: string;\n order?: string;\n weight?: SearchWeight;\n hasExpression: boolean;\n }[];\n hasWith: boolean;\n hasWhere: boolean;\n hasExpression: boolean;\n columnKeys?: string[];\n includeKeys?: string[];\n}\n\nexport const processIndexes = (\n config: AnyRakeDbConfig,\n changeTableData: ChangeTableData,\n ast: RakeDbAst[],\n compareExpressions: CompareExpression[],\n) => {\n const codeIndexes = collectCodeIndexes(config, changeTableData);\n const codeComparableIndexes = collectCodeComparableIndexes(\n config,\n codeIndexes,\n );\n\n // to skip indexes without SQL from being added when they are matched with already existing indexes\n const skipCodeIndexes = new Map<number, boolean>();\n\n // to skip indexes with SQL from being added while their SQL is being asynchronously compared with existing indexes\n const holdCodeIndexes = new Map<TableData.Index, boolean>();\n\n // counter for async SQL comparisons that are in progress\n let wait = 0;\n\n const {\n changeTableAst: { shape },\n } = changeTableData;\n for (const dbIndex of changeTableData.dbTableData.indexes) {\n const hasAddedOrDroppedColumn = dbIndex.columns.some(\n (column) =>\n 'column' in column && checkForColumnAddOrDrop(shape, column.column),\n );\n if (hasAddedOrDroppedColumn) continue;\n\n normalizeIndex(dbIndex);\n\n const { found, rename, foundAndHasSql } = findMatchingIndex(\n dbIndex,\n codeComparableIndexes,\n codeIndexes,\n skipCodeIndexes,\n changeTableData.codeTable.table,\n config,\n );\n\n const { columns: dbColumns } = dbIndex;\n\n if (!foundAndHasSql) {\n handleIndexChange(\n changeTableData,\n dbIndex,\n dbColumns,\n found[0],\n rename[0],\n );\n continue;\n }\n\n for (const codeIndex of found) {\n holdCodeIndexes.set(codeIndex, true);\n }\n\n const compare: CompareExpression['compare'] = [];\n for (let i = 0; i < dbIndex.columns.length; i++) {\n const column = dbIndex.columns[i];\n if (!('expression' in column)) continue;\n\n compare.push({\n inDb: column.expression,\n inCode: found.map(\n (index) => (index.columns[i] as { expression: string }).expression,\n ),\n });\n }\n\n if (dbIndex.with) {\n compare.push({\n inDb: dbIndex.with,\n inCode: found.map((index) => index.options.with as string),\n });\n }\n\n if (dbIndex.where) {\n compare.push({\n inDb: dbIndex.where,\n inCode: found.map((index) => index.options.where as string),\n });\n }\n\n wait++;\n compareExpressions.push({\n compare,\n handle(index) {\n const codeIndex = index === undefined ? undefined : found[index];\n\n handleIndexChange(\n changeTableData,\n dbIndex,\n dbColumns,\n codeIndex,\n index === undefined ? undefined : rename[index],\n );\n\n if (codeIndex) {\n holdCodeIndexes.delete(codeIndex);\n }\n\n if (!--wait && holdCodeIndexes.size) {\n addIndexes(changeTableData, [...holdCodeIndexes.keys()]);\n\n if (!changeTableData.pushedAst) {\n changeTableData.pushedAst = true;\n ast.push(changeTableData.changeTableAst);\n }\n }\n },\n });\n }\n\n const indexesToAdd = codeIndexes.filter(\n (index, i) => !skipCodeIndexes.has(i) && !holdCodeIndexes.has(index),\n );\n if (indexesToAdd.length) {\n addIndexes(\n changeTableData,\n indexesToAdd.map((x) => ({\n ...x,\n columns: x.columnKeys,\n columnNames: x.columns,\n options: x.options.include\n ? { ...x.options, include: x.includeKeys }\n : x.options,\n })),\n );\n }\n};\n\nconst collectCodeIndexes = (\n config: AnyRakeDbConfig,\n { codeTable, changeTableAst: { shape } }: ChangeTableData,\n): CodeIndex[] => {\n const codeIndexes: CodeIndex[] = [];\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as ColumnType;\n if (!column.data.indexes) continue;\n\n const name = column.data.name ?? key;\n if (checkForColumnAddOrDrop(shape, name)) continue;\n\n codeIndexes.push(\n ...column.data.indexes.map(\n ({\n options: { collate, opclass, order, weight, ...options },\n ...index\n }) => ({\n columns: [\n {\n collate,\n opclass,\n order,\n weight,\n column: name,\n },\n ],\n ...index,\n options: options.include\n ? config.snakeCase\n ? {\n ...options,\n include: toArray(options.include).map(toSnakeCase),\n }\n : options\n : options,\n columnKeys: [{ collate, opclass, order, weight, column: key }],\n includeKeys: options.include,\n }),\n ),\n );\n }\n\n if (codeTable.internal.tableData.indexes) {\n codeIndexes.push(\n ...codeTable.internal.tableData.indexes.map((x) => ({\n ...x,\n columns: config.snakeCase\n ? x.columns.map((c) =>\n 'column' in c ? { ...c, column: toSnakeCase(c.column) } : c,\n )\n : x.columns,\n columnKeys: x.columns,\n options:\n x.options.include && config.snakeCase\n ? {\n ...x.options,\n include: toArray(x.options.include).map(toSnakeCase),\n }\n : x.options,\n includeKeys: x.options.include,\n })),\n );\n }\n\n return codeIndexes;\n};\n\nconst collectCodeComparableIndexes = (\n config: AnyRakeDbConfig,\n codeIndexes: CodeIndex[],\n): ComparableIndex[] => {\n return codeIndexes.map((codeIndex) => {\n normalizeIndex(codeIndex.options);\n\n return indexToComparable({\n ...codeIndex.options,\n include:\n codeIndex.options.include === undefined\n ? undefined\n : config.snakeCase\n ? toArray(codeIndex.options.include).map(toSnakeCase)\n : toArray(codeIndex.options.include),\n columns: codeIndex.columns,\n name: codeIndex.name,\n columnKeys: codeIndex.columnKeys,\n includeKeys: codeIndex.includeKeys,\n });\n });\n};\n\nconst normalizeIndex = (index: {\n using?: string;\n unique?: boolean;\n nullsNotDistinct?: boolean;\n}) => {\n if (index.using === 'btree') index.using = undefined;\n if (!index.unique) index.unique = undefined;\n if (index.nullsNotDistinct === false) index.nullsNotDistinct = undefined;\n};\n\nconst indexToComparable = (\n index: TableData.Index.Options & {\n columns: DbStructure.Index['columns'];\n name?: string;\n columnKeys?: TableData.Index.ColumnOrExpressionOptions[];\n includeKeys?: MaybeArray<string>;\n },\n) => {\n let hasExpression = false;\n const columns = index.columns.map((column) => {\n const result = {\n ...column,\n expression: undefined,\n hasExpression: 'expression' in column,\n };\n if (result.hasExpression) hasExpression = true;\n return result;\n });\n\n return {\n ...index,\n schemaName: undefined,\n tableName: undefined,\n with: undefined,\n hasWith: !!index.with,\n where: undefined,\n hasWhere: !!index.where,\n columns,\n hasExpression,\n } as ComparableIndex;\n};\n\ninterface IndexChange {\n found: TableData.Index[];\n rename: (string | undefined)[];\n}\n\nconst findMatchingIndex = (\n dbIndex: DbStructure.Index,\n codeComparableIndexes: ComparableIndex[],\n codeIndexes: TableData.Index[],\n skipCodeIndexes: Map<number, boolean>,\n tableName: string,\n config: AnyRakeDbConfig,\n) => {\n const dbComparableIndex = indexToComparable(dbIndex);\n\n const { found, rename } = findMatchingIndexWithoutSql(\n dbComparableIndex,\n codeComparableIndexes,\n codeIndexes,\n skipCodeIndexes,\n tableName,\n config,\n );\n\n const foundAndHasSql = found.length && checkIfIndexHasSql(dbComparableIndex);\n\n return { found, rename, foundAndHasSql };\n};\n\nconst findMatchingIndexWithoutSql = (\n dbIndex: ComparableIndex,\n codeComparableIndexes: ComparableIndex[],\n codeIndexes: TableData.Index[],\n skipCodeIndexes: Map<number, boolean>,\n tableName: string,\n config: AnyRakeDbConfig,\n): IndexChange => {\n const found: TableData.Index[] = [];\n const rename: (string | undefined)[] = [];\n\n const { columns: dbColumns, ...dbIndexWithoutColumns } = dbIndex;\n\n for (let i = 0; i < codeComparableIndexes.length; i++) {\n if (skipCodeIndexes.has(i)) continue;\n\n const { columns: codeColumns, ...codeIndex } = codeComparableIndexes[i];\n if (\n dbColumns.length === codeColumns.length &&\n !dbColumns.some((dbColumn, i) => !deepCompare(dbColumn, codeColumns[i]))\n ) {\n let a: RecordUnknown = dbIndexWithoutColumns;\n let b = codeIndex;\n const codeName = b.name ?? getIndexName(tableName, dbColumns);\n if (a.name !== b.name) {\n a = { ...a, name: undefined };\n b = {\n ...b,\n name: undefined,\n columnKeys: undefined,\n includeKeys: undefined,\n };\n if (a.language && !b.language) {\n b.language = config.language ?? 'english';\n }\n\n if (deepCompare(a, b)) {\n found.push(codeIndexes[i]);\n rename.push(\n dbIndexWithoutColumns.name !== codeName ? codeName : undefined,\n );\n }\n } else {\n const {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n columnKeys,\n includeKeys,\n ...codeIndexWithoutKeys\n } = codeIndex;\n if (deepCompare(dbIndexWithoutColumns, codeIndexWithoutKeys)) {\n found.push(codeIndexes[i]);\n rename.push(undefined);\n }\n }\n\n if (found.length && !checkIfIndexHasSql(codeIndex)) {\n skipCodeIndexes.set(i, true);\n }\n }\n }\n\n return { found, rename };\n};\n\nconst checkIfIndexHasSql = (\n index: Pick<ComparableIndex, 'hasWith' | 'hasWhere' | 'hasExpression'>,\n) => index.hasWith || index.hasWhere || index.hasExpression;\n\nconst handleIndexChange = (\n {\n changeTableAst,\n schema,\n codeTable,\n changingColumns,\n delayedAst,\n }: ChangeTableData,\n dbIndex: DbStructure.Index,\n dbColumns: DbStructure.Index['columns'],\n found?: TableData.Index,\n rename?: string,\n) => {\n if (!found) {\n const indexName =\n dbIndex.name === getIndexName(changeTableAst.name, dbColumns)\n ? undefined\n : dbIndex.name;\n\n if (dbColumns.length === 1 && 'column' in dbColumns[0]) {\n const column = changingColumns[dbColumns[0].column];\n if (column) {\n (column.from.data.indexes ??= []).push({\n options: dbIndex,\n name: indexName,\n });\n return;\n }\n }\n\n (changeTableAst.drop.indexes ??= []).push({\n columns: dbColumns,\n options: dbIndex,\n name: indexName,\n });\n } else if (rename) {\n delayedAst.push({\n type: 'renameTableItem',\n kind: 'INDEX',\n tableSchema: schema,\n tableName: codeTable.table,\n from: dbIndex.name,\n to: rename,\n });\n }\n};\n\ninterface IndexWithMaybeColumnNames extends TableData.Index {\n columnNames?: TableData.Index.ColumnOrExpressionOptions[];\n}\n\nconst addIndexes = (\n { changeTableAst, changingColumns }: ChangeTableData,\n add: IndexWithMaybeColumnNames[],\n) => {\n const indexes = (changeTableAst.add.indexes ??= []);\n for (const index of add) {\n if (index.columns.length === 1 && 'column' in index.columns[0]) {\n const column =\n changingColumns[\n ((index.columnNames || index.columns)[0] as { column: string }).column\n ];\n if (column) {\n (column.to.data.indexes ??= []).push(index);\n continue;\n }\n }\n\n indexes.push(index);\n }\n};\n","import {\n RakeDbAst,\n DbStructure,\n concatSchemaAndName,\n getSchemaAndTableFromName,\n getConstraintName,\n AnyRakeDbConfig,\n} from 'rake-db';\nimport { ColumnType, TableData } from 'pqb';\nimport { ChangeTableData, TableShapes } from './tables.generator';\nimport { deepCompare, toSnakeCase } from 'orchid-core';\nimport { checkForColumnAddOrDrop } from './generators.utils';\n\ninterface Constraint extends TableData.Constraint {\n references: TableData.References;\n}\n\ninterface CodeForeignKey {\n references: DbStructure.References;\n codeConstraint: Constraint;\n}\n\ninterface ReferencesWithStringTable extends TableData.References {\n fnOrTable: string;\n}\n\nconst mapMatchToDb: {\n [K in TableData.References.Match]: DbStructure.ForeignKeyMatch;\n} = {\n FULL: 'f',\n PARTIAL: 'p',\n SIMPLE: 's',\n};\n\nconst mapMatchToCode = {} as {\n [K in DbStructure.ForeignKeyMatch]: TableData.References.Match;\n};\nfor (const key in mapMatchToDb) {\n mapMatchToCode[\n mapMatchToDb[\n key as TableData.References.Match\n ] as DbStructure.ForeignKeyMatch\n ] = key as TableData.References.Match;\n}\n\nconst mapActionToDb: {\n [K in TableData.References.Action]: DbStructure.ForeignKeyAction;\n} = {\n 'NO ACTION': 'a',\n RESTRICT: 'r',\n CASCADE: 'c',\n 'SET NULL': 'n',\n 'SET DEFAULT': 'd',\n};\n\nconst mapActionToCode = {} as {\n [K in DbStructure.ForeignKeyAction]: TableData.References.Action;\n};\nfor (const key in mapActionToDb) {\n mapActionToCode[\n mapActionToDb[\n key as TableData.References.Action\n ] as DbStructure.ForeignKeyAction\n ] = key as TableData.References.Action;\n}\n\nexport const processForeignKeys = (\n config: AnyRakeDbConfig,\n ast: RakeDbAst[],\n changeTables: ChangeTableData[],\n currentSchema: string,\n tableShapes: TableShapes,\n): void => {\n for (const changeTableData of changeTables) {\n const codeForeignKeys = collectCodeFkeys(\n config,\n changeTableData,\n currentSchema,\n );\n\n const { codeTable, dbTableData, changeTableAst, schema, changingColumns } =\n changeTableData;\n const { shape, add, drop } = changeTableAst;\n let changed = false;\n\n for (const dbConstraint of dbTableData.constraints) {\n const { references: dbReferences } = dbConstraint;\n if (!dbReferences) continue;\n\n const hasChangedColumn = dbReferences.columns.some((column) =>\n checkForColumnAddOrDrop(shape, column),\n );\n if (hasChangedColumn) continue;\n\n const foreignShape =\n tableShapes[\n `${dbReferences.foreignSchema}.${dbReferences.foreignTable}`\n ];\n const hasForeignChangedColumn =\n foreignShape &&\n dbReferences.foreignColumns.some((column) => {\n const res = checkForColumnAddOrDrop(foreignShape, column);\n // console.log(res, column);\n return res;\n });\n if (hasForeignChangedColumn) continue;\n\n let found = false;\n let rename: string | undefined;\n for (let i = 0; i < codeForeignKeys.length; i++) {\n const codeForeignKey = codeForeignKeys[i];\n const codeReferences = codeForeignKey.references;\n if (deepCompare(dbReferences, codeReferences)) {\n found = true;\n codeForeignKeys.splice(i, 1);\n\n const codeName =\n codeForeignKey.codeConstraint.name ??\n getConstraintName(\n codeTable.table,\n codeForeignKey,\n config.snakeCase,\n );\n if (codeName !== dbConstraint.name) {\n rename = codeName;\n }\n }\n }\n\n if (!found) {\n const foreignKey = dbForeignKeyToCodeForeignKey(\n config,\n dbConstraint,\n dbReferences,\n );\n\n if (\n dbReferences.columns.length === 1 &&\n changingColumns[dbReferences.columns[0]]\n ) {\n const column = changingColumns[dbReferences.columns[0]];\n (column.from.data.foreignKeys ??= []).push({\n fnOrTable: foreignKey.references.fnOrTable,\n foreignColumns: foreignKey.references.foreignColumns,\n options: foreignKey.references.options,\n });\n } else {\n (drop.constraints ??= []).push(foreignKey);\n }\n\n changed = true;\n } else if (rename) {\n ast.push({\n type: 'renameTableItem',\n kind: 'CONSTRAINT',\n tableSchema: schema,\n tableName: codeTable.table,\n from: dbConstraint.name,\n to: rename,\n });\n }\n }\n\n if (codeForeignKeys.length) {\n const constraints = (add.constraints ??= []);\n for (const { codeConstraint, references } of codeForeignKeys) {\n if (\n references.columns.length === 1 &&\n changingColumns[references.columns[0]]\n ) {\n const column = changingColumns[references.columns[0]];\n (column.to.data.foreignKeys ??= []).push({\n fnOrTable: references.foreignTable,\n foreignColumns: codeConstraint.references.foreignColumns,\n options: codeConstraint.references.options,\n });\n } else {\n constraints.push(codeConstraint);\n }\n }\n\n changed = true;\n }\n\n if (changed && !changeTableData.pushedAst) {\n changeTableData.pushedAst = true;\n ast.push(changeTableData.changeTableAst);\n }\n }\n};\n\nconst collectCodeFkeys = (\n config: AnyRakeDbConfig,\n { codeTable, changeTableAst: { shape } }: ChangeTableData,\n currentSchema: string,\n): CodeForeignKey[] => {\n const codeForeignKeys: CodeForeignKey[] = [];\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as ColumnType;\n if (!column.data.foreignKeys) continue;\n\n const name = column.data.name ?? key;\n if (checkForColumnAddOrDrop(shape, name)) continue;\n\n codeForeignKeys.push(\n ...column.data.foreignKeys.map((x) => {\n const columns = [name];\n\n const fnOrTable = fnOrTableToString(x.fnOrTable);\n\n return parseForeignKey(\n config,\n {\n name: x.options?.name,\n references: {\n columns: [key],\n fnOrTable,\n foreignColumns: x.foreignColumns,\n options: x.options,\n },\n },\n {\n columns,\n fnOrTable,\n foreignColumns: x.foreignColumns,\n options: x.options,\n },\n currentSchema,\n );\n }),\n );\n }\n\n if (codeTable.internal.tableData.constraints) {\n for (const tableConstraint of codeTable.internal.tableData.constraints) {\n const { references: refs } = tableConstraint;\n if (!refs) continue;\n\n const fnOrTable = fnOrTableToString(refs.fnOrTable);\n\n codeForeignKeys.push(\n parseForeignKey(\n config,\n {\n ...tableConstraint,\n references: {\n ...refs,\n fnOrTable,\n },\n },\n {\n ...refs,\n fnOrTable,\n columns: config.snakeCase\n ? refs.columns.map(toSnakeCase)\n : refs.columns,\n foreignColumns: config.snakeCase\n ? refs.foreignColumns.map(toSnakeCase)\n : refs.foreignColumns,\n },\n currentSchema,\n ),\n );\n }\n }\n\n return codeForeignKeys;\n};\n\nexport const fnOrTableToString = (\n fnOrTable: TableData.References['fnOrTable'],\n) => {\n if (typeof fnOrTable !== 'string') {\n const { schema, table } = new (fnOrTable())();\n fnOrTable = concatSchemaAndName({ schema, name: table });\n }\n return fnOrTable;\n};\n\nconst parseForeignKey = (\n config: AnyRakeDbConfig,\n codeConstraint: Constraint,\n references: ReferencesWithStringTable,\n currentSchema: string,\n): CodeForeignKey => {\n const { fnOrTable, columns, foreignColumns, options } = references;\n const [schema, table] = getSchemaAndTableFromName(fnOrTable);\n\n return {\n references: {\n foreignSchema: schema ?? currentSchema,\n foreignTable: table,\n columns,\n foreignColumns: config.snakeCase\n ? foreignColumns.map(toSnakeCase)\n : foreignColumns,\n match: mapMatchToDb[options?.match || 'SIMPLE'],\n onUpdate: mapActionToDb[options?.onUpdate || 'NO ACTION'],\n onDelete: mapActionToDb[options?.onDelete || 'NO ACTION'],\n },\n codeConstraint,\n };\n};\n\nconst dbForeignKeyToCodeForeignKey = (\n config: AnyRakeDbConfig,\n dbConstraint: DbStructure.Constraint,\n dbReferences: DbStructure.References,\n): { name?: string; references: TableData.References } => ({\n name:\n dbConstraint.name ===\n getConstraintName(\n dbConstraint.tableName,\n { references: dbReferences },\n config.snakeCase,\n )\n ? undefined\n : dbConstraint.name,\n references: {\n columns: dbReferences.columns,\n fnOrTable: `${dbReferences.foreignSchema}.${dbReferences.foreignTable}`,\n foreignColumns: dbReferences.foreignColumns,\n options: {\n match:\n dbReferences.match === 's'\n ? undefined\n : mapMatchToCode[dbReferences.match],\n onUpdate:\n dbReferences.onUpdate === 'a'\n ? undefined\n : mapActionToCode[dbReferences.onUpdate],\n onDelete:\n dbReferences.onDelete === 'a'\n ? undefined\n : mapActionToCode[dbReferences.onDelete],\n },\n },\n});\n","import { ColumnDataCheckBase, TemplateLiteralArgs } from 'orchid-core';\nimport { ColumnType, RawSQL } from 'pqb';\nimport { DbStructure, RakeDbAst } from 'rake-db';\nimport { ChangeTableData } from './tables.generator';\nimport { checkForColumnAddOrDrop, CompareExpression } from './generators.utils';\n\ninterface CodeCheck extends ColumnDataCheckBase {\n column?: string;\n}\n\nexport const processChecks = (\n ast: RakeDbAst[],\n changeTableData: ChangeTableData,\n compareExpressions: CompareExpression[],\n): void => {\n const codeChecks = collectCodeChecks(changeTableData);\n const {\n dbTableData,\n changeTableAst: { add, shape },\n } = changeTableData;\n\n const hasDbChecks = dbTableData.constraints.some((c) => c.check);\n if (!hasDbChecks) {\n if (codeChecks.length) {\n const constraints = (add.constraints ??= []);\n for (const check of codeChecks) {\n if (check.column && changeTableData.changingColumns[check.column]) {\n const column = changeTableData.changingColumns[check.column];\n column.to.data.check = check;\n } else {\n constraints.push({ check: check.sql, name: check.name });\n }\n }\n }\n return;\n }\n\n let wait = 0;\n const foundCodeChecks = new Set<number>();\n for (const dbConstraint of dbTableData.constraints) {\n const { check: dbCheck, name } = dbConstraint;\n if (!dbCheck) continue;\n\n const hasChangedColumn = dbCheck.columns?.some((column) =>\n checkForColumnAddOrDrop(shape, column),\n );\n if (hasChangedColumn) continue;\n\n if (codeChecks.length) {\n wait++;\n compareExpressions.push({\n compare: [\n {\n inDb: dbCheck.expression,\n inCode: codeChecks.map((check) => check.sql),\n },\n ],\n handle(index) {\n if (index !== undefined) return;\n\n dropCheck(changeTableData, dbCheck, name);\n\n if (--wait === 0 && !changeTableData.pushedAst) {\n changeTableData.pushedAst = true;\n\n (add.constraints ??= []).push(\n ...codeChecks\n .filter((_, i) => !foundCodeChecks.has(i))\n .map((check) => ({\n name: check.name,\n check: check.sql,\n })),\n );\n\n ast.push(changeTableData.changeTableAst);\n }\n },\n });\n } else {\n dropCheck(changeTableData, dbCheck, name);\n }\n }\n};\n\nconst collectCodeChecks = ({\n codeTable,\n changeTableAst: { shape },\n}: ChangeTableData): CodeCheck[] => {\n const codeChecks: CodeCheck[] = [];\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as ColumnType;\n if (!column.data.check) continue;\n\n const name = column.data.name ?? key;\n if (checkForColumnAddOrDrop(shape, name)) continue;\n\n codeChecks.push({\n ...column.data.check,\n column: name,\n });\n }\n\n if (codeTable.internal.tableData.constraints) {\n for (const constraint of codeTable.internal.tableData.constraints) {\n const { check } = constraint;\n if (check) {\n codeChecks.push({ sql: check, name: constraint.name });\n }\n }\n }\n\n return codeChecks;\n};\n\nconst dropCheck = (\n { changeTableAst: { drop }, changingColumns }: ChangeTableData,\n dbCheck: DbStructure.Check,\n name: string,\n) => {\n const constraints = (drop.constraints ??= []);\n const sql = new RawSQL([\n [dbCheck.expression],\n ] as unknown as TemplateLiteralArgs);\n\n if (dbCheck.columns?.length === 1 && changingColumns[dbCheck.columns[0]]) {\n const column = changingColumns[dbCheck.columns[0]];\n column.from.data.name = 'i_d';\n column.from.data.check = {\n name,\n sql,\n };\n } else {\n constraints.push({\n name,\n check: sql,\n });\n }\n};\n","import {\n Adapter,\n ColumnsShape,\n ColumnType,\n GeneratorIgnore,\n VirtualColumn,\n} from 'pqb';\nimport {\n DbStructure,\n IntrospectedStructure,\n AnyRakeDbConfig,\n RakeDbAst,\n DbStructureDomainsMap,\n getDbStructureTableData,\n StructureToAstCtx,\n StructureToAstTableData,\n tableToAst,\n getSchemaAndTableFromName,\n} from 'rake-db';\nimport {\n CompareExpression,\n compareSqlExpressions,\n promptCreateOrRename,\n TableExpression,\n} from './generators.utils';\nimport { processPrimaryKey } from './primaryKey.generator';\nimport { processIndexes } from './indexes.generator';\nimport {\n getColumnDbType,\n processColumns,\n TypeCastsCache,\n} from './columns.generator';\nimport { processForeignKeys } from './foreignKeys.generator';\nimport { processChecks } from './checks.generator';\nimport { CodeTable } from '../generate';\n\nexport interface CompareSql {\n values: unknown[];\n expressions: {\n inDb: string;\n inCode: string;\n change(): void;\n }[];\n}\n\nexport interface ChangeTableSchemaData {\n codeTable: CodeTable;\n dbTable: DbStructure.Table;\n}\n\nexport interface ChangeTableData extends ChangeTableSchemaData {\n dbTableData: StructureToAstTableData;\n schema: string;\n changeTableAst: RakeDbAst.ChangeTable;\n pushedAst: boolean;\n changingColumns: ChangingColumns;\n delayedAst: RakeDbAst[];\n}\n\ninterface ChangingColumns {\n [dbName: string]: ChangingColumnsPair;\n}\n\nexport interface ChangingColumnsPair {\n from: ColumnType;\n to: ColumnType;\n}\n\nexport interface TableShapes {\n [K: string]: RakeDbAst.ChangeTableShape;\n}\n\nexport const processTables = async (\n ast: RakeDbAst[],\n structureToAstCtx: StructureToAstCtx,\n domainsMap: DbStructureDomainsMap,\n adapter: Adapter,\n tables: CodeTable[],\n dbStructure: IntrospectedStructure,\n currentSchema: string,\n config: AnyRakeDbConfig,\n generatorIgnore: GeneratorIgnore | undefined,\n verifying: boolean | undefined,\n): Promise<void> => {\n const createTables: CodeTable[] = collectCreateTables(\n tables,\n dbStructure,\n currentSchema,\n );\n const compareSql: CompareSql = { values: [], expressions: [] };\n const tableExpressions: TableExpression[] = [];\n const { changeTables, changeTableSchemas, dropTables, tableShapes } =\n collectChangeAndDropTables(\n config,\n tables,\n dbStructure,\n currentSchema,\n createTables,\n generatorIgnore,\n );\n\n applyChangeTableSchemas(changeTableSchemas, currentSchema, ast);\n\n await applyCreateOrRenameTables(\n dbStructure,\n createTables,\n dropTables,\n changeTables,\n tableShapes,\n currentSchema,\n ast,\n verifying,\n );\n\n await applyChangeTables(\n adapter,\n changeTables,\n structureToAstCtx,\n dbStructure,\n domainsMap,\n ast,\n currentSchema,\n config,\n compareSql,\n tableExpressions,\n verifying,\n );\n\n processForeignKeys(config, ast, changeTables, currentSchema, tableShapes);\n\n await Promise.all([\n applyCompareSql(compareSql, adapter),\n compareSqlExpressions(tableExpressions, adapter),\n ]);\n\n for (const dbTable of dropTables) {\n ast.push(\n tableToAst(structureToAstCtx, dbStructure, dbTable, 'drop', domainsMap),\n );\n }\n};\n\nconst collectCreateTables = (\n tables: CodeTable[],\n dbStructure: IntrospectedStructure,\n currentSchema: string,\n): CodeTable[] => {\n return tables.reduce<CodeTable[]>((acc, codeTable) => {\n const tableSchema = codeTable.q.schema ?? currentSchema;\n const hasDbTable = dbStructure.tables.some(\n (t) => t.name === codeTable.table && t.schemaName === tableSchema,\n );\n if (!hasDbTable) {\n acc.push(codeTable);\n }\n return acc;\n }, []);\n};\n\nconst collectChangeAndDropTables = (\n config: AnyRakeDbConfig,\n tables: CodeTable[],\n dbStructure: IntrospectedStructure,\n currentSchema: string,\n createTables: CodeTable[],\n generatorIgnore: GeneratorIgnore | undefined,\n): {\n changeTables: ChangeTableData[];\n changeTableSchemas: ChangeTableSchemaData[];\n dropTables: DbStructure.Table[];\n tableShapes: TableShapes;\n} => {\n const changeTables: ChangeTableData[] = [];\n const changeTableSchemas: ChangeTableSchemaData[] = [];\n const dropTables: DbStructure.Table[] = [];\n const tableShapes: TableShapes = {};\n const ignoreTables = generatorIgnore?.tables?.map((name) => {\n const [schema = currentSchema, table] = getSchemaAndTableFromName(name);\n return { schema, table };\n });\n\n for (const dbTable of dbStructure.tables) {\n if (\n dbTable.name === config.migrationsTable ||\n ignoreTables?.some(\n ({ schema, table }) =>\n table === dbTable.name && schema === dbTable.schemaName,\n )\n )\n continue;\n\n const codeTable = tables.find(\n (t) =>\n t.table === dbTable.name &&\n (t.q.schema ?? currentSchema) === dbTable.schemaName,\n );\n if (codeTable) {\n addChangeTable(\n dbStructure,\n changeTables,\n tableShapes,\n currentSchema,\n dbTable,\n codeTable,\n );\n continue;\n }\n\n const i = createTables.findIndex((t) => t.table === dbTable.name);\n if (i !== -1) {\n const codeTable = createTables[i];\n createTables.splice(i, 1);\n changeTableSchemas.push({ codeTable, dbTable });\n continue;\n }\n\n dropTables.push(dbTable);\n }\n\n return { changeTables, changeTableSchemas, dropTables, tableShapes };\n};\n\nconst applyChangeTableSchemas = (\n changeTableSchemas: ChangeTableSchemaData[],\n currentSchema: string,\n ast: RakeDbAst[],\n) => {\n for (const { codeTable, dbTable } of changeTableSchemas) {\n const fromSchema = dbTable.schemaName;\n const toSchema = codeTable.q.schema ?? currentSchema;\n\n ast.push({\n type: 'renameType',\n kind: 'TABLE',\n fromSchema,\n from: dbTable.name,\n toSchema,\n to: dbTable.name,\n });\n }\n};\n\nconst applyChangeTables = async (\n adapter: Adapter,\n changeTables: ChangeTableData[],\n structureToAstCtx: StructureToAstCtx,\n dbStructure: IntrospectedStructure,\n domainsMap: DbStructureDomainsMap,\n ast: RakeDbAst[],\n currentSchema: string,\n config: AnyRakeDbConfig,\n compareSql: CompareSql,\n tableExpressions: TableExpression[],\n verifying: boolean | undefined,\n): Promise<void> => {\n const compareExpressions: CompareExpression[] = [];\n const typeCastsCache: TypeCastsCache = {};\n\n for (const changeTableData of changeTables) {\n compareExpressions.length = 0;\n\n await processTableChange(\n adapter,\n structureToAstCtx,\n dbStructure,\n domainsMap,\n ast,\n currentSchema,\n config,\n changeTableData,\n compareSql,\n compareExpressions,\n typeCastsCache,\n verifying,\n );\n\n if (compareExpressions.length) {\n const { codeTable } = changeTableData;\n const names: string[] = [];\n const types: string[] = [];\n\n for (const key in codeTable.shape) {\n const column = codeTable.shape[key] as ColumnType;\n // skip virtual columns\n if (!column.dataType) continue;\n\n const name = column.data.name ?? key;\n names.push(name);\n types.push(getColumnDbType(column, currentSchema));\n }\n\n const tableName = codeTable.table;\n const source = `(VALUES (${types\n .map((x) => `NULL::${x}`)\n .join(', ')})) \"${tableName}\"(${names\n .map((x) => `\"${x}\"`)\n .join(', ')})`;\n\n tableExpressions.push(\n ...compareExpressions.map((x) => ({ ...x, source })),\n );\n }\n }\n};\n\nconst applyCompareSql = async (compareSql: CompareSql, adapter: Adapter) => {\n if (compareSql.expressions.length) {\n const {\n rows: [results],\n } = await adapter.arrays({\n text:\n 'SELECT ' +\n compareSql.expressions\n .map((x) => `${x.inDb} = (${x.inCode})`)\n .join(', '),\n values: compareSql.values,\n });\n\n for (let i = 0; i < results.length; i++) {\n if (!results[i]) {\n compareSql.expressions[i].change();\n }\n }\n }\n};\n\nconst applyCreateOrRenameTables = async (\n dbStructure: IntrospectedStructure,\n createTables: CodeTable[],\n dropTables: DbStructure.Table[],\n changeTables: ChangeTableData[],\n tableShapes: TableShapes,\n currentSchema: string,\n ast: RakeDbAst[],\n verifying: boolean | undefined,\n) => {\n for (const codeTable of createTables) {\n if (dropTables.length) {\n const index = await promptCreateOrRename(\n 'table',\n codeTable.table,\n dropTables.map((x) => x.name),\n verifying,\n );\n if (index) {\n const dbTable = dropTables[index - 1];\n dropTables.splice(index - 1, 1);\n\n ast.push({\n type: 'renameType',\n kind: 'TABLE',\n fromSchema: dbTable.schemaName,\n from: dbTable.name,\n toSchema: codeTable.q.schema ?? currentSchema,\n to: codeTable.table,\n });\n\n addChangeTable(\n dbStructure,\n changeTables,\n tableShapes,\n currentSchema,\n dbTable,\n codeTable,\n );\n\n continue;\n }\n }\n\n ast.push(createTableAst(currentSchema, codeTable));\n }\n};\n\nconst addChangeTable = (\n dbStructure: IntrospectedStructure,\n changeTables: ChangeTableData[],\n tableShapes: TableShapes,\n currentSchema: string,\n dbTable: DbStructure.Table,\n codeTable: CodeTable,\n) => {\n const shape = {};\n const schema = codeTable.q.schema ?? currentSchema;\n\n changeTables.push({\n codeTable,\n dbTable,\n dbTableData: getDbStructureTableData(dbStructure, dbTable),\n schema,\n changeTableAst: {\n type: 'changeTable',\n schema,\n name: codeTable.table,\n shape: shape,\n add: {},\n drop: {},\n },\n pushedAst: false,\n changingColumns: {},\n delayedAst: [],\n });\n\n tableShapes[`${schema}.${codeTable.table}`] = shape;\n};\n\nconst createTableAst = (\n currentSchema: string,\n table: CodeTable,\n): RakeDbAst.Table => {\n return {\n type: 'table',\n action: 'create',\n schema: table.q.schema === currentSchema ? undefined : table.q.schema,\n comment: table.internal.comment,\n name: table.table,\n shape: makeTableShape(table),\n noPrimaryKey: table.internal.noPrimaryKey ? 'ignore' : 'error',\n ...table.internal.tableData,\n };\n};\n\nconst makeTableShape = (table: CodeTable): ColumnsShape => {\n const shape: ColumnsShape = {};\n for (const key in table.shape) {\n const column = table.shape[key];\n if (!(column instanceof VirtualColumn)) {\n shape[key] = column as ColumnType;\n }\n }\n return shape;\n};\n\nconst processTableChange = async (\n adapter: Adapter,\n structureToAstCtx: StructureToAstCtx,\n dbStructure: IntrospectedStructure,\n domainsMap: DbStructureDomainsMap,\n ast: RakeDbAst[],\n currentSchema: string,\n config: AnyRakeDbConfig,\n changeTableData: ChangeTableData,\n compareSql: CompareSql,\n compareExpressions: CompareExpression[],\n typeCastsCache: TypeCastsCache,\n verifying: boolean | undefined,\n) => {\n await processColumns(\n adapter,\n config,\n structureToAstCtx,\n dbStructure,\n domainsMap,\n changeTableData,\n ast,\n currentSchema,\n compareSql,\n typeCastsCache,\n verifying,\n );\n\n processPrimaryKey(config, changeTableData);\n\n processIndexes(config, changeTableData, ast, compareExpressions);\n\n processChecks(ast, changeTableData, compareExpressions);\n\n const { changeTableAst } = changeTableData;\n if (\n Object.keys(changeTableAst.shape).length ||\n Object.keys(changeTableAst.add).length ||\n Object.keys(changeTableAst.drop).length\n ) {\n changeTableData.pushedAst = true;\n ast.push(changeTableAst);\n }\n\n if (changeTableData.delayedAst.length) {\n ast.push(...changeTableData.delayedAst);\n }\n};\n","import { Adapter, QueryInternal } from 'pqb';\nimport {\n AnyRakeDbConfig,\n RakeDbAst,\n IntrospectedStructure,\n makeDomainsMap,\n StructureToAstCtx,\n astToMigration,\n} from 'rake-db';\nimport { processSchemas } from './generators/schemas.generator';\nimport { processExtensions } from './generators/extensions.generator';\nimport { processDomains } from './generators/domains.generator';\nimport { processEnums } from './generators/enums.generator';\nimport { processTables } from './generators/tables.generator';\nimport { CodeItems } from './generate';\n\nexport interface ComposeMigrationParams {\n structureToAstCtx: StructureToAstCtx;\n codeItems: CodeItems;\n currentSchema: string;\n internal: QueryInternal;\n verifying?: boolean;\n}\n\nexport const composeMigration = async (\n adapter: Adapter,\n config: AnyRakeDbConfig,\n ast: RakeDbAst[],\n dbStructure: IntrospectedStructure,\n {\n structureToAstCtx,\n codeItems: { schemas, enums, tables, domains },\n currentSchema,\n internal,\n verifying,\n }: ComposeMigrationParams,\n): Promise<string | undefined> => {\n const domainsMap = makeDomainsMap(structureToAstCtx, dbStructure);\n\n await processSchemas(ast, schemas, dbStructure, verifying);\n processExtensions(ast, dbStructure, currentSchema, internal.extensions);\n await processDomains(\n ast,\n adapter,\n structureToAstCtx,\n domainsMap,\n dbStructure,\n currentSchema,\n domains,\n );\n await processEnums(ast, enums, dbStructure, currentSchema, verifying);\n await processTables(\n ast,\n structureToAstCtx,\n domainsMap,\n adapter,\n tables,\n dbStructure,\n currentSchema,\n config,\n internal.generatorIgnore,\n verifying,\n );\n\n return astToMigration(currentSchema, config, ast);\n};\n","import { ColumnSchemaConfig } from 'orchid-core';\nimport { Adapter } from 'pqb';\nimport {\n AnyRakeDbConfig,\n createMigrationInterface,\n ChangeCallback,\n introspectDbSchema,\n} from 'rake-db';\nimport { composeMigration, ComposeMigrationParams } from './composeMigration';\nimport { AbortSignal } from './generate';\n\nexport const verifyMigration = async (\n adapter: Adapter,\n config: AnyRakeDbConfig,\n migrationCode: string,\n generateMigrationParams: ComposeMigrationParams,\n): Promise<string | false | undefined> => {\n const migrationFn = new Function('change', migrationCode);\n\n return adapter.transaction(\n { text: 'BEGIN' },\n async (trx) => {\n const changeFns: ChangeCallback<unknown>[] = [];\n migrationFn((changeCb: ChangeCallback<unknown>) => {\n changeFns.push(changeCb);\n });\n\n const { log } = config;\n config.log = false;\n\n const db = createMigrationInterface<ColumnSchemaConfig, unknown>(\n trx,\n true,\n config,\n );\n\n config.log = log;\n\n for (const changeFn of changeFns) {\n await changeFn(db, true);\n }\n\n const dbStructure = await introspectDbSchema(trx);\n generateMigrationParams.verifying = true;\n let code: string | undefined;\n try {\n code = await composeMigration(\n adapter,\n config,\n [],\n dbStructure,\n generateMigrationParams,\n );\n } catch (err) {\n if (err instanceof AbortSignal) {\n return false;\n }\n throw err;\n }\n\n return code;\n },\n { text: 'ROLLBACK' },\n );\n};\n","import {\n AnyRakeDbConfig,\n RakeDbAst,\n colors,\n exhaustive,\n getSchemaAndTableFromName,\n pluralize,\n} from 'rake-db';\nimport {\n addCode,\n Code,\n codeToString,\n ColumnToCodeCtx,\n toArray,\n} from 'orchid-core';\nimport { getColumnDbType } from './generators/columns.generator';\nimport { fnOrTableToString } from './generators/foreignKeys.generator';\n\nexport const report = (\n ast: RakeDbAst[],\n config: AnyRakeDbConfig,\n currentSchema: string,\n) => {\n if (!config.logger) return;\n\n const code: Code[] = [];\n\n let green, red, yellow, pale;\n if (typeof config.log === 'object' && config.log.colors === false) {\n green = red = yellow = pale = (s: string) => s;\n } else {\n ({ green, red, yellow, pale } = colors);\n }\n\n for (const a of ast) {\n switch (a.type) {\n case 'table': {\n let hasPrimaryKey = !!a.primaryKey;\n const counters = {\n column: 0,\n index: a.indexes?.length ?? 0,\n 'foreign key':\n a.constraints?.reduce<number>(\n (sum, c) => (c.references ? sum + 1 : sum),\n 0,\n ) ?? 0,\n check:\n a.constraints?.reduce<number>(\n (sum, c) => (c.check ? sum + 1 : sum),\n 0,\n ) ?? 0,\n };\n for (const key in a.shape) {\n counters.column++;\n\n const column = a.shape[key];\n if (column.data.primaryKey) {\n hasPrimaryKey = true;\n }\n\n if (column.data.indexes) {\n counters.index += column.data.indexes.length;\n }\n\n if (column.data.foreignKeys) {\n counters['foreign key'] += column.data.foreignKeys.length;\n }\n\n if (column.data.check) {\n counters.check++;\n }\n }\n\n const summary: string[] = [];\n\n for (const key in counters) {\n const value = counters[key as keyof typeof counters];\n if (value || key === 'column') {\n summary.push(\n `${value} ${pluralize(key, value, key === 'index' ? 'es' : 's')}`,\n );\n }\n }\n\n if (!hasPrimaryKey) {\n summary.push('no primary key');\n }\n\n code.push(\n `${\n a.action === 'create'\n ? green('+ create table')\n : red('- drop table')\n } ${dbItemName(a, currentSchema)} (${summary.join(', ')})`,\n );\n break;\n }\n case 'changeTable': {\n const inner: Code[] = [];\n\n const toCodeCtx: ColumnToCodeCtx = {\n t: 't',\n table: a.name,\n migration: true,\n snakeCase: config.snakeCase,\n };\n\n for (const key in a.shape) {\n const changes = toArray(a.shape[key]);\n for (const change of changes) {\n if (change.type === 'add' || change.type === 'drop') {\n const column = change.item;\n const { primaryKey, indexes, foreignKeys, check } = column.data;\n\n inner.push(\n `${\n change.type === 'add'\n ? green('+ add column')\n : red('- drop column')\n } ${key} ${\n column.data.alias ?? getColumnDbType(column, currentSchema)\n }${column.data.isNullable ? ' nullable' : ''}${\n primaryKey ? ' primary key' : ''\n }${\n foreignKeys\n ? ` references ${foreignKeys\n .map((fk) => {\n return `${fnOrTableToString(\n fk.fnOrTable,\n )}(${fk.foreignColumns.join(', ')})`;\n })\n .join(', ')}`\n : ''\n }${\n indexes?.length\n ? indexes.length === 1\n ? ', has index'\n : `, has ${indexes.length} indexes`\n : ''\n }${check ? `, checks ${check.sql.toSQL({ values: [] })}` : ''}`,\n );\n } else if (change.type === 'change') {\n const name = change.from.column?.data.name ?? key;\n const changes: Code[] = [];\n inner.push(`${yellow('~ change column')} ${name}:`, changes);\n changes.push(`${yellow('from')}: `);\n\n const fromCode = change.from.column!.toCode(toCodeCtx, key);\n for (const code of fromCode) {\n addCode(changes, code);\n }\n\n changes.push(` ${yellow('to')}: `);\n\n const toCode = change.to.column!.toCode(toCodeCtx, key);\n for (const code of toCode) {\n addCode(changes, code);\n }\n } else if (change.type === 'rename') {\n inner.push(\n `${yellow('~ rename column')} ${key} ${yellow('=>')} ${\n change.name\n }`,\n );\n } else {\n exhaustive(change.type);\n }\n }\n }\n\n if (a.drop.primaryKey) {\n inner.push(\n `${red(`- drop primary key`)} on (${a.drop.primaryKey.columns.join(\n ', ',\n )})`,\n );\n }\n\n if (a.drop.indexes) {\n for (const index of a.drop.indexes) {\n inner.push(\n `${red(\n `- drop${index.options.unique ? ' unique' : ''} index`,\n )} on (${index.columns\n .map((c) => ('column' in c ? c.column : c.expression))\n .join(', ')})`,\n );\n }\n }\n\n if (a.drop.constraints) {\n for (const { references } of a.drop.constraints) {\n if (!references) continue;\n\n const [schema, name] = getSchemaAndTableFromName(\n references.fnOrTable as string,\n );\n\n inner.push(\n `${red(`- drop foreign key`)} on (${references.columns.join(\n ', ',\n )}) to ${dbItemName(\n {\n schema,\n name,\n },\n currentSchema,\n )}(${references.foreignColumns.join(', ')})`,\n );\n }\n\n for (const { check } of a.drop.constraints) {\n if (!check) continue;\n\n inner.push(`${red(`- drop check`)} ${check.toSQL({ values: [] })}`);\n }\n }\n\n if (a.add.primaryKey) {\n inner.push(\n `${green(`+ add primary key`)} on (${a.add.primaryKey.columns.join(\n ', ',\n )})`,\n );\n }\n\n if (a.add.indexes) {\n for (const index of a.add.indexes) {\n inner.push(\n `${green(\n `+ add${index.options.unique ? ' unique' : ''} index`,\n )} on (${index.columns\n .map((c) => ('column' in c ? c.column : c.expression))\n .join(', ')})`,\n );\n }\n }\n\n if (a.add.constraints) {\n for (const { references } of a.add.constraints) {\n if (!references) continue;\n\n inner.push(\n `${green(`+ add foreign key`)} on (${references.columns.join(\n ', ',\n )}) to ${\n references.fnOrTable as string\n }(${references.foreignColumns.join(', ')})`,\n );\n }\n\n for (const { check } of a.add.constraints) {\n if (!check) continue;\n\n inner.push(\n `${green(`+ add check`)} ${check.toSQL({ values: [] })}`,\n );\n }\n }\n\n code.push(\n `${yellow('~ change table')} ${dbItemName(a, currentSchema)}${\n inner.length ? ':' : ''\n }`,\n );\n\n if (inner.length) {\n code.push(inner);\n }\n\n break;\n }\n case 'schema': {\n code.push(\n `${\n a.action === 'create'\n ? green('+ create schema')\n : red('- drop schema')\n } ${a.name}`,\n );\n break;\n }\n case 'renameSchema': {\n code.push(\n `${yellow('~ rename schema')} ${a.from} ${yellow('=>')} ${a.to}`,\n );\n break;\n }\n case 'renameType': {\n code.push(\n `${yellow(\n `~ ${\n a.fromSchema !== a.toSchema\n ? a.from !== a.to\n ? 'change schema and rename'\n : 'change schema of'\n : 'rename'\n } ${a.kind.toLowerCase()}`,\n )} ${dbItemName(\n {\n schema: a.fromSchema,\n name: a.from,\n },\n currentSchema,\n )} ${yellow('=>')} ${dbItemName(\n {\n schema: a.toSchema,\n name: a.to,\n },\n currentSchema,\n )}`,\n );\n break;\n }\n case 'extension': {\n code.push(\n `${\n a.action === 'create'\n ? green('+ create extension')\n : red('- drop extension')\n } ${dbItemName(a, currentSchema)}${\n a.version ? ` ${pale(a.version)}` : ''\n }`,\n );\n break;\n }\n case 'enum': {\n code.push(\n `${\n a.action === 'create' ? green('+ create enum') : red('- drop enum')\n } ${dbItemName(a, currentSchema)}: (${a.values.join(', ')})`,\n );\n break;\n }\n case 'enumValues': {\n code.push(\n `${\n a.action === 'add'\n ? green('+ add values to enum')\n : red('- remove values from enum')\n } ${dbItemName(a, currentSchema)}: ${a.values.join(', ')}`,\n );\n break;\n }\n case 'changeEnumValues': {\n if (a.fromValues) {\n code.push(\n `${red('- remove values from enum')} ${dbItemName(\n a,\n currentSchema,\n )}: ${a.fromValues.join(', ')}`,\n );\n }\n if (a.toValues) {\n code.push(\n `${green('+ add values to enum')} ${dbItemName(\n a,\n currentSchema,\n )}: ${a.toValues.join(', ')}`,\n );\n }\n break;\n }\n case 'domain': {\n code.push(\n `${\n a.action === 'create'\n ? green('+ create domain')\n : red('- drop domain')\n } ${dbItemName(a, currentSchema)}`,\n );\n break;\n }\n case 'view':\n case 'collation':\n case 'renameEnumValues':\n case 'constraint':\n break;\n case 'renameTableItem': {\n code.push(\n `${yellow(`~ rename ${a.kind.toLowerCase()}`)} on table ${dbItemName(\n { schema: a.tableSchema, name: a.tableName },\n currentSchema,\n )}: ${a.from} ${yellow('=>')} ${a.to}`,\n );\n break;\n }\n default:\n exhaustive(a);\n }\n }\n\n const result = codeToString(code, '', ' ');\n config.logger.log(result);\n};\n\nconst dbItemName = (\n { schema, name }: { schema?: string; name: string },\n currentSchema: string,\n) => {\n return schema && schema !== currentSchema ? `${schema}.${name}` : name;\n};\n","import { PickQueryShape, QueryColumn, toCamelCase } from 'orchid-core';\nimport {\n Adapter,\n AdapterOptions,\n ColumnsShape,\n ColumnType,\n defaultSchemaConfig,\n DomainColumn,\n PickQueryInternal,\n PickQueryQ,\n Query,\n QueryInternal,\n UnknownColumn,\n} from 'pqb';\nimport {\n AnyRakeDbConfig,\n concatSchemaAndName,\n getSchemaAndTableFromName,\n introspectDbSchema,\n IntrospectedStructure,\n makeFileVersion,\n makeStructureToAstCtx,\n migrate,\n RakeDbAst,\n writeMigrationFile,\n} from 'rake-db';\nimport { EnumItem } from './generators/enums.generator';\nimport { CodeDomain } from './generators/domains.generator';\nimport { composeMigration, ComposeMigrationParams } from './composeMigration';\nimport { verifyMigration } from './verifyMigration';\nimport { report } from './reportGeneratedMigration';\nimport path from 'node:path';\nimport { pathToFileURL } from 'url';\n\nexport interface CodeTable\n extends PickQueryQ,\n PickQueryShape,\n PickQueryInternal {\n table: string;\n}\n\nexport interface CodeItems {\n schemas: Set<string>;\n enums: Map<string, EnumItem>;\n tables: CodeTable[];\n domains: CodeDomain[];\n}\n\ninterface AfterPull {\n adapter: Adapter;\n version: string;\n}\n\nexport interface DbInstance {\n $queryBuilder: Query;\n}\n\nexport class AbortSignal extends Error {}\n\nexport const generate = async (\n options: AdapterOptions[],\n config: AnyRakeDbConfig,\n args: string[],\n afterPull?: AfterPull,\n): Promise<void> => {\n let { dbPath } = config;\n if (!dbPath || !config.baseTable) throw invalidConfig(config);\n if (!options.length) throw new Error(`Database options must not be empty`);\n\n if (!dbPath.endsWith('.ts')) dbPath += '.ts';\n\n let migrationName = args[0] ?? 'generated';\n let up: boolean;\n if (migrationName === 'up') {\n up = true;\n migrationName = 'generated';\n } else {\n up = args[1] === 'up';\n }\n\n const { dbStructure, adapters } = await migrateAndPullStructures(\n options,\n config,\n afterPull,\n );\n\n const [adapter] = adapters;\n const currentSchema = adapter.schema ?? 'public';\n\n const db = await getDbFromConfig(config, dbPath);\n const { columnTypes, internal } = db.$queryBuilder;\n\n const codeItems = await getActualItems(\n db,\n currentSchema,\n internal,\n columnTypes,\n );\n\n const structureToAstCtx = makeStructureToAstCtx(config, currentSchema);\n\n const generateMigrationParams: ComposeMigrationParams = {\n structureToAstCtx,\n codeItems,\n currentSchema,\n internal,\n };\n\n const ast: RakeDbAst[] = [];\n\n let migrationCode;\n try {\n migrationCode = await composeMigration(\n adapter,\n config,\n ast,\n dbStructure,\n generateMigrationParams,\n );\n // console.log(migrationCode);\n } catch (err) {\n if (err instanceof AbortSignal) {\n await closeAdapters(adapters);\n return;\n }\n throw err;\n }\n\n if (migrationCode && !afterPull) {\n const result = await verifyMigration(\n adapter,\n config,\n migrationCode,\n generateMigrationParams,\n );\n\n if (result !== undefined) {\n throw new Error(\n `Failed to verify generated migration: some of database changes were not applied properly. This is a bug, please open an issue, attach the following migration code:\\n${migrationCode}${\n result === false ? '' : `\\nAfter applying:\\n${result}`\n }`,\n );\n }\n }\n\n const { logger } = config;\n\n if ((!up || !migrationCode) && !afterPull) await closeAdapters(adapters);\n\n if (!migrationCode) {\n logger?.log('No changes were detected');\n return;\n }\n\n const version = afterPull?.version ?? (await makeFileVersion({}, config));\n\n const delayLog: string[] = [];\n await writeMigrationFile(\n {\n ...config,\n logger: logger ? { ...logger, log: (msg) => delayLog.push(msg) } : logger,\n },\n version,\n migrationName,\n migrationCode,\n );\n\n report(ast, config, currentSchema);\n\n if (logger) {\n for (const msg of delayLog) {\n logger.log(`\\n${msg}`);\n }\n }\n\n if (up) {\n await migrate({}, options, config, undefined, adapters);\n } else if (!afterPull) {\n await closeAdapters(adapters);\n }\n};\n\nconst invalidConfig = (config: AnyRakeDbConfig) =>\n new Error(\n `\\`${\n config.dbPath ? 'baseTable' : 'dbPath'\n }\\` setting must be set in the migrations config for the generator to work`,\n );\n\nconst getDbFromConfig = async (\n config: AnyRakeDbConfig,\n dbPath: string,\n): Promise<DbInstance> => {\n const module = await config.import(\n pathToFileURL(path.resolve(config.basePath, dbPath)).toString(),\n );\n const db = (module as { [K: string]: DbInstance })[\n config.dbExportedAs ?? 'db'\n ];\n if (!db?.$queryBuilder) {\n throw new Error(\n `Unable to import OrchidORM instance as ${\n config.dbExportedAs ?? 'db'\n } from ${config.dbPath}`,\n );\n }\n return db;\n};\n\nconst migrateAndPullStructures = async (\n options: AdapterOptions[],\n config: AnyRakeDbConfig,\n afterPull?: AfterPull,\n): Promise<{ dbStructure: IntrospectedStructure; adapters: Adapter[] }> => {\n if (afterPull) {\n return {\n dbStructure: {\n schemas: [],\n tables: [],\n views: [],\n indexes: [],\n constraints: [],\n triggers: [],\n extensions: [],\n enums: [],\n domains: [],\n collations: [],\n },\n adapters: [afterPull.adapter],\n };\n }\n\n const adapters = await migrate(\n {},\n options,\n config,\n undefined,\n undefined,\n true,\n );\n\n const dbStructures = await Promise.all(\n adapters.map((adapter) => introspectDbSchema(adapter)),\n );\n\n const dbStructure = dbStructures[0];\n for (let i = 1; i < dbStructures.length; i++) {\n compareDbStructures(dbStructure, dbStructures[i], i);\n }\n\n return { dbStructure, adapters };\n};\n\nconst compareDbStructures = (\n a: unknown,\n b: unknown,\n i: number,\n path?: string,\n) => {\n let err: true | undefined;\n if (typeof a !== typeof b) {\n err = true;\n }\n\n if (!a || typeof a !== 'object') {\n if (a !== b) {\n err = true;\n }\n } else {\n if (Array.isArray(a)) {\n for (let n = 0, len = a.length; n < len; n++) {\n compareDbStructures(\n a[n],\n (b as unknown[])[n],\n i,\n path ? `${path}[${n}]` : String(n),\n );\n }\n } else {\n for (const key in a) {\n compareDbStructures(\n a[key as keyof typeof a],\n (b as Record<string, unknown>)[key],\n i,\n path ? `${path}.${key}` : key,\n );\n }\n }\n }\n\n if (err) {\n throw new Error(`${path} in the db 0 does not match db ${i}`);\n }\n};\n\nconst getActualItems = async (\n db: DbInstance,\n currentSchema: string,\n internal: QueryInternal,\n columnTypes: unknown,\n): Promise<CodeItems> => {\n const tableNames = new Set<string>();\n const habtmTables = new Map<string, CodeTable>();\n\n const codeItems: CodeItems = {\n schemas: new Set(undefined),\n enums: new Map(),\n tables: [],\n domains: [],\n };\n\n const domains = new Map<string, CodeDomain>();\n\n for (const key in db) {\n if (key[0] === '$') continue;\n\n const table = db[key as keyof typeof db] as Query;\n\n if (!table.table) {\n throw new Error(`Table ${key} is missing table property`);\n }\n\n const { schema } = table.q;\n const name = concatSchemaAndName({ schema, name: table.table });\n if (tableNames.has(name)) {\n throw new Error(`Table ${name} is defined more than once`);\n }\n\n tableNames.add(name);\n\n if (schema) codeItems.schemas.add(schema);\n\n codeItems.tables.push(table as never);\n\n for (const key in table.relations) {\n const column = table.shape[key];\n // column won't be set for has and belongs to many\n if (column && 'joinTable' in column) {\n processHasAndBelongsToManyColumn(column, habtmTables, codeItems);\n }\n }\n\n for (const key in table.shape) {\n const column = table.shape[key] as ColumnType;\n // remove computed columns from the shape\n if (column.data.computed) {\n delete table.shape[key];\n } else if (column instanceof DomainColumn) {\n const [schemaName = currentSchema, name] = getSchemaAndTableFromName(\n column.dataType,\n );\n domains.set(column.dataType, {\n schemaName,\n name,\n column: (column.data.as ??\n new UnknownColumn(defaultSchemaConfig)) as ColumnType,\n });\n } else if (column.dataType === 'enum') {\n processEnumColumn(column, currentSchema, codeItems);\n }\n }\n }\n\n if (internal.extensions) {\n for (const extension of internal.extensions) {\n const [schema] = getSchemaAndTableFromName(extension.name);\n if (schema) codeItems.schemas.add(schema);\n }\n }\n\n if (internal.domains) {\n for (const key in internal.domains) {\n const [schemaName = currentSchema, name] = getSchemaAndTableFromName(key);\n const column = internal.domains[key](columnTypes);\n\n domains.set(key, {\n schemaName,\n name,\n column,\n });\n }\n }\n\n for (const domain of domains.values()) {\n codeItems.schemas.add(domain.schemaName);\n codeItems.domains.push(domain);\n }\n\n return codeItems;\n};\n\nconst processEnumColumn = (\n column: QueryColumn,\n currentSchema: string,\n codeItems: CodeItems,\n) => {\n const { enumName, options } = column as unknown as {\n enumName: string;\n options: [string, ...string[]];\n };\n\n const [schema, name] = getSchemaAndTableFromName(enumName);\n const enumSchema = schema ?? currentSchema;\n\n codeItems.enums.set(`${enumSchema}.${name}`, {\n schema: enumSchema,\n name,\n values: options,\n });\n if (schema) codeItems.schemas.add(schema);\n};\n\nconst processHasAndBelongsToManyColumn = (\n column: QueryColumn & { joinTable: unknown },\n habtmTables: Map<string, CodeTable>,\n codeItems: CodeItems,\n) => {\n const q = (column as { joinTable: CodeTable }).joinTable;\n const prev = habtmTables.get(q.table);\n if (prev) {\n for (const key in q.shape) {\n if (q.shape[key].dataType !== prev.shape[key]?.dataType) {\n throw new Error(\n `Column ${key} in ${q.table} in hasAndBelongsToMany relation does not match with the relation on the other side`,\n );\n }\n }\n return;\n }\n habtmTables.set(q.table, q);\n\n const joinTable = Object.create(q);\n\n const shape: ColumnsShape = {};\n for (const key in joinTable.shape) {\n const column = Object.create(joinTable.shape[key]);\n column.data = {\n ...column.data,\n name: column.data.name ?? key,\n identity: undefined,\n primaryKey: undefined,\n default: undefined,\n };\n shape[toCamelCase(key)] = column;\n }\n joinTable.shape = shape;\n joinTable.internal = {\n ...joinTable.internal,\n tableData: {\n primaryKey: {\n columns: Object.keys(shape),\n },\n },\n noPrimaryKey: false,\n };\n\n codeItems.tables.push(joinTable);\n\n return;\n};\n\nconst closeAdapters = (adapters: Adapter[]) => {\n return Promise.all(adapters.map((x) => x.close()));\n};\n","import { columnsShapeToCode, pushTableDataCode, TableData } from 'pqb';\nimport { AnyRakeDbConfig, RakeDbAst } from 'rake-db';\nimport {\n Code,\n codeToString,\n getImportPath,\n RecordString,\n singleQuote,\n toCamelCase,\n toPascalCase,\n} from 'orchid-core';\nimport path from 'node:path';\n\ninterface TableInfo {\n key: string;\n dbTableName: string;\n name: string;\n className: string;\n path: string;\n}\n\ninterface TableInfos {\n [dbTableName: string]: TableInfo;\n}\n\nexport interface AppCodeGenTable extends TableInfo {\n content: string;\n}\n\nexport interface AppCodeGenTables {\n [K: string]: AppCodeGenTable;\n}\n\ninterface FKeys {\n [K: string]: { table: TableInfo; references: TableData.References }[];\n}\n\nexport const getTableInfosAndFKeys = (\n asts: RakeDbAst[],\n config: AnyRakeDbConfig,\n): { tableInfos: TableInfos; fkeys: FKeys } => {\n const generateTableTo =\n config.generateTableTo ?? ((name: string) => `./tables/${name}.table.ts`);\n\n const tableInfos: TableInfos = {};\n const fkeys: FKeys = {};\n for (const ast of asts) {\n if (ast.type === 'table') {\n const tableKey = toCamelCase(ast.name);\n const dbTableName = ast.schema ? `${ast.schema}.${ast.name}` : ast.name;\n let tablePath = path.resolve(config.basePath, generateTableTo(tableKey));\n if (!tablePath.endsWith('.ts')) tablePath += '.ts';\n\n const name = toPascalCase(ast.name);\n\n const info: TableInfo = {\n dbTableName,\n key: tableKey,\n path: tablePath,\n name,\n className: `${name}Table`,\n };\n\n tableInfos[dbTableName] = info;\n\n if (ast.constraints) {\n for (const { references } of ast.constraints) {\n if (!references) continue;\n\n (fkeys[references.fnOrTable as string] ??= []).push({\n table: info,\n references,\n });\n }\n }\n }\n }\n\n return { tableInfos, fkeys };\n};\n\nexport const appCodeGenTable = (\n tableInfos: TableInfos,\n fkeys: FKeys,\n ast: RakeDbAst.Table,\n baseTablePath: string,\n baseTableExportedAs: string,\n): AppCodeGenTable => {\n const tableInfo =\n tableInfos[ast.schema ? `${ast.schema}.${ast.name}` : ast.name];\n\n const imports: RecordString = {\n 'orchid-orm': 'Selectable, Insertable, Updatable',\n [getImportPath(tableInfo.path, baseTablePath)]: baseTableExportedAs,\n };\n\n const props: Code[] = [];\n\n if (ast.schema) {\n props.push(`schema = ${singleQuote(ast.schema)};`);\n }\n\n props.push(`readonly table = ${singleQuote(ast.name)};`);\n\n if (ast.comment) {\n props.push(`comment = ${singleQuote(ast.comment)};`);\n }\n\n if (ast.noPrimaryKey === 'ignore') {\n props.push('noPrimaryKey = true;');\n }\n\n const hasTableData = Boolean(\n ast.primaryKey || ast.indexes?.length || ast.constraints?.length,\n );\n\n const shapeCode = columnsShapeToCode({ t: 't', table: ast.name }, ast.shape);\n\n props.push(\n `columns = this.setColumns(${hasTableData ? '\\n ' : ''}(t) => ({`,\n hasTableData ? [shapeCode] : shapeCode,\n hasTableData ? ' }),' : '}));',\n );\n\n if (hasTableData) {\n props.push(pushTableDataCode([], ast), ');');\n }\n\n const relations: Code[] = [];\n\n const fullTableName = ast.schema ? `${ast.schema}.${ast.name}` : ast.name;\n const belongsTo = fkeys[fullTableName];\n if (belongsTo) {\n for (const { table, references } of belongsTo) {\n imports[getImportPath(tableInfo.path, table.path)] = table.className;\n\n relations.push(\n `${table.key}: this.belongsTo(() => ${table.className}, {`,\n [\n `columns: [${references.foreignColumns\n .map(singleQuote)\n .join(', ')}],`,\n `references: [${references.columns.map(singleQuote).join(', ')}],`,\n ],\n '}),',\n );\n }\n }\n\n if (ast.constraints) {\n for (const { references } of ast.constraints) {\n if (!references) continue;\n\n const table = tableInfos[references.fnOrTable as string];\n imports[getImportPath(tableInfo.path, table.path)] = table.className;\n\n relations.push(\n `${table.key}: this.hasMany(() => ${table.className}, {`,\n [\n `columns: [${references.columns.map(singleQuote).join(', ')}],`,\n `references: [${references.foreignColumns\n .map(singleQuote)\n .join(', ')}],`,\n ],\n '}),',\n );\n }\n }\n\n if (relations.length) {\n props.push('', 'relations = {', relations, '};');\n }\n\n const importsCode = importsToCode(imports);\n\n const { name, className } = tableInfo;\n const code: Code[] = [\n `export type ${name} = Selectable<${className}>;\nexport type ${name}New = Insertable<${className}>;\nexport type ${name}Update = Updatable<${className}>;\n\nexport class ${className} extends ${baseTableExportedAs} {`,\n props,\n '}\\n',\n ];\n\n return {\n ...tableInfo,\n content: importsCode + '\\n\\n' + codeToString(code, '', ' '),\n };\n};\n\nfunction importsToCode(imports: Record<string, string>): string {\n return Object.entries(imports)\n .map(([from, name]) => `import { ${name} } from '${from}';`)\n .join('\\n');\n}\n","import fs from 'fs/promises';\nimport {\n CallExpression,\n Expression,\n ImportDeclaration,\n NamedImports,\n NodeArray,\n ObjectLiteralExpression,\n Statement,\n VariableStatement,\n} from 'typescript';\nimport { getImportPath, quoteObjectKey } from 'orchid-core';\nimport { AppCodeGenTables } from './tables.appCodeGenerator';\nimport { DbExtension } from 'pqb';\nimport { RakeDbAst } from 'rake-db';\n\n// importing directly won't work after compiling\nimport typescript from 'typescript';\nconst { createSourceFile, ScriptTarget, SyntaxKind } = typescript;\n\ntype Change = [from: number, to: number] | string;\n\nexport const appCodeGenUpdateDbFile = async (\n dbPath: string,\n tables: AppCodeGenTables,\n extensions: DbExtension[],\n domains: RakeDbAst.Domain[],\n): Promise<string | undefined> => {\n const content = await fs.readFile(dbPath, 'utf-8');\n const statements = getTsStatements(content);\n const importName = getOrchidOrmImportName(statements);\n if (!importName) {\n throw new Error(`Main file does not contain import of orchid-orm`);\n }\n const { config, tablesList } = getOrchidOrmArgs(importName, statements);\n\n const changes: Change[] = [];\n\n let replacedConfig: string | undefined;\n if (extensions.length || domains.length) {\n let code = content.slice(config.pos, config.end).trim();\n\n if (code[0] !== '{') code = `{...${code}}`;\n\n code = '{\\n ' + code.slice(1, -1).trim();\n\n if (!code.endsWith(',')) code += ',';\n\n if (extensions.length) {\n code += `\\n extensions: [${extensions\n .map((ext) =>\n ext.version ? `{ ${ext.name}: '${ext.version}' }` : `'${ext.name}'`,\n )\n .join(', ')}],`;\n }\n\n if (domains.length) {\n code += `\\n domains: {\\n ${domains\n .sort((a, b) => (a.name > b.name ? 1 : -1))\n .map(\n (ast) =>\n `${quoteObjectKey(\n ast.schema ? `${ast.schema}.${ast.name}` : ast.name,\n )}: (t) => ${ast.baseType.toCode(\n { t: 't', table: ast.name },\n ast.baseType.data.name ?? '',\n )},`,\n )\n .join('\\n ')}\\n },`;\n }\n\n replacedConfig = code + '\\n}';\n }\n\n const tablesChanges = makeTablesListChanges(\n content,\n statements,\n tablesList,\n tables,\n dbPath,\n );\n\n if (tablesChanges) {\n addChange(\n content,\n changes,\n tablesChanges.imports.pos,\n tablesChanges.imports.text,\n );\n }\n\n if (replacedConfig) {\n replaceContent(content, changes, config.pos, config.end, replacedConfig);\n }\n\n if (tablesChanges) {\n addChange(\n content,\n changes,\n tablesChanges.tablesList.pos,\n tablesChanges.tablesList.text,\n );\n }\n\n return applyChanges(content, changes);\n};\n\nconst getTsStatements = (content: string): NodeArray<Statement> => {\n return createSourceFile('file.ts', content, ScriptTarget.Latest, true)\n .statements;\n};\n\nconst getOrchidOrmImportName = (\n statements: NodeArray<Statement>,\n): string | undefined => {\n for (const node of statements) {\n if (node.kind !== SyntaxKind.ImportDeclaration) continue;\n\n const imp = node as ImportDeclaration;\n const source = imp.moduleSpecifier.getText().slice(1, -1);\n if (source !== 'orchid-orm') continue;\n\n if (!imp.importClause) continue;\n\n const elements = (imp.importClause.namedBindings as NamedImports)?.elements;\n\n if (!elements) imp;\n\n for (const element of elements) {\n if (\n element.propertyName?.escapedText === 'orchidORM' ||\n element.name.escapedText === 'orchidORM'\n ) {\n return element.name.escapedText.toString();\n }\n }\n }\n\n return;\n};\n\nconst makeTablesListChanges = (\n content: string,\n statements: NodeArray<Statement>,\n object: ObjectLiteralExpression,\n tables: AppCodeGenTables,\n dbPath: string,\n) => {\n const spaces = getTablesListSpaces(content, object);\n\n let imports = '';\n let tablesList = '';\n const prependComma =\n object.properties.length && !object.properties.hasTrailingComma;\n const tablesListNewLine = content\n .slice(object.properties.end, object.end)\n .includes('\\n');\n\n const tablesArr = Object.values(tables);\n for (let i = 0; i < tablesArr.length; i++) {\n const { path, className, key } = tablesArr[i];\n const importPath = getImportPath(dbPath, path);\n\n imports += `\\nimport { ${className} } from '${importPath}';`;\n\n tablesList += `${\n i === 0 && prependComma ? ',' : ''\n }\\n${spaces} ${key}: ${className},`;\n\n if (i === tablesArr.length - 1 && !tablesListNewLine) {\n tablesList += `\\n${spaces}`;\n }\n }\n\n if (!imports.length) return;\n\n let importPos = 0;\n for (const node of statements) {\n if (node.kind === SyntaxKind.ImportDeclaration) {\n importPos = node.end;\n }\n }\n\n return {\n imports: { pos: importPos, text: imports },\n tablesList: { pos: object.properties.end, text: tablesList },\n };\n};\n\nconst getTablesListSpaces = (content: string, object: Expression): string => {\n const lines = content.slice(0, object.end).split('\\n');\n const last = lines[lines.length - 1];\n return last.match(/^\\s+/)?.[0] || '';\n};\n\nconst getOrchidOrmArgs = (\n importName: string,\n statements: NodeArray<Statement>,\n): { config: Expression; tablesList: ObjectLiteralExpression } => {\n for (const v of statements) {\n if (v.kind !== SyntaxKind.VariableStatement) continue;\n\n for (const node of (v as VariableStatement).declarationList.declarations) {\n const call = node.initializer as CallExpression;\n if (call?.kind !== SyntaxKind.CallExpression) continue;\n\n if (call.expression.getText() !== importName) continue;\n\n if (call.arguments.length !== 2) {\n throw new Error(\n 'Invalid number of arguments when initializing orchid orm',\n );\n }\n\n const object = call.arguments[1] as ObjectLiteralExpression;\n if (object?.kind !== SyntaxKind.ObjectLiteralExpression) {\n throw new Error(\n 'Second argument of orchidORM must be an object literal',\n );\n }\n\n return { config: call.arguments[0], tablesList: object };\n }\n }\n\n throw new Error('List of tables is not found in main file');\n};\n\nconst addChange = (\n content: string,\n changes: Change[],\n at: number,\n text: string,\n end = at,\n) => {\n if (changes.length === 0) {\n changes.push([0, at], text, [end, content.length]);\n } else {\n const last = changes[changes.length - 1] as [number, number];\n last[1] = at;\n changes.push(text, [end, content.length]);\n }\n};\n\nconst replaceContent = (\n content: string,\n changes: Change[],\n from: number,\n to: number,\n text: string,\n) => {\n addChange(content, changes, from, text, to);\n};\n\nconst applyChanges = (content: string, changes: Change[]) => {\n return changes.length\n ? changes\n .map((item) =>\n typeof item === 'string' ? item : content.slice(item[0], item[1]),\n )\n .join('')\n : content;\n};\n","import { Adapter, AdapterOptions, DbExtension } from 'pqb';\nimport {\n AnyRakeDbConfig,\n makeFileVersion,\n makeStructureToAstCtx,\n RakeDbAst,\n saveMigratedVersion,\n SilentQueries,\n structureToAst,\n} from 'rake-db';\nimport { pathToLog } from 'orchid-core';\nimport fs from 'fs/promises';\nimport path from 'node:path';\nimport {\n AppCodeGenTable,\n appCodeGenTable,\n AppCodeGenTables,\n getTableInfosAndFKeys,\n} from './appCodeGenerators/tables.appCodeGenerator';\nimport { appCodeGenUpdateDbFile } from './appCodeGenerators/dbFile.appCodeGenerator';\nimport { generate } from '../generate/generate';\n\nexport const pull = async (\n options: AdapterOptions[],\n config: AnyRakeDbConfig,\n) => {\n if (!config.dbPath || !config.baseTable) {\n throw new Error(\n `\\`${\n config.dbPath ? 'baseTable' : 'dbPath'\n }\\` setting must be set in the migrations config for pull command`,\n );\n }\n\n const baseTablePath = config.baseTable.getFilePath();\n const baseTableExportedAs = config.baseTable.exportAs;\n\n const adapters = options.map((opts) => new Adapter(opts));\n const [adapter] = adapters;\n const currentSchema = adapter.schema || 'public';\n\n const ctx = makeStructureToAstCtx(config, currentSchema);\n\n const asts = await structureToAst(ctx, adapter, config);\n\n const { tableInfos, fkeys } = getTableInfosAndFKeys(asts, config);\n\n const exclusiveWriteOptions = { flag: 'wx' as const };\n const pendingFileWrites: [\n path: string,\n content: string,\n options?: { flag: 'wx' },\n ][] = [];\n\n const tables: AppCodeGenTables = {};\n const extensions: DbExtension[] = [];\n const domains: RakeDbAst.Domain[] = [];\n\n let firstTable: undefined | AppCodeGenTable;\n for (const ast of asts) {\n switch (ast.type) {\n case 'table': {\n const table = appCodeGenTable(\n tableInfos,\n fkeys,\n ast,\n baseTablePath,\n baseTableExportedAs,\n );\n tables[table.key] = table;\n if (!firstTable) firstTable = table;\n pendingFileWrites.push([\n table.path,\n table.content,\n exclusiveWriteOptions,\n ]);\n break;\n }\n case 'extension': {\n extensions.push({\n name: ast.schema ? `${ast.schema}.${ast.name}` : ast.name,\n version: ast.version,\n });\n break;\n }\n case 'domain': {\n domains.push(ast);\n break;\n }\n }\n }\n\n if (!firstTable && !extensions.length && !domains.length) {\n await adapter.close();\n return;\n }\n\n let dbPath = path.resolve(config.basePath, config.dbPath);\n if (!dbPath.endsWith('.ts')) dbPath += '.ts';\n const content = await appCodeGenUpdateDbFile(\n dbPath,\n tables,\n extensions,\n domains,\n );\n if (content) pendingFileWrites.push([dbPath, content]);\n\n if (firstTable) {\n await fs.mkdir(path.dirname(firstTable.path), { recursive: true });\n }\n\n await Promise.all(\n pendingFileWrites.map(([path, content, options]) =>\n fs.writeFile(path, content, options).then(() => {\n config.logger?.log(`Created ${pathToLog(path)}`);\n }),\n ),\n );\n\n const version = await makeFileVersion({}, config);\n await generate(options, config, ['pull'], { adapter, version });\n\n // save migrated version into all configured databases\n await Promise.all(\n adapters.map(async (adapter) => {\n const silentAdapter = adapter as unknown as SilentQueries;\n silentAdapter.silentArrays = adapter.arrays;\n await saveMigratedVersion(silentAdapter, version, 'pull.ts', config);\n await adapter.close();\n }),\n );\n};\n","import { rakeDbCommands } from 'rake-db';\nimport { generate } from './generate/generate';\nimport { pull } from './pull/pull';\nimport { ColumnSchemaConfig } from 'orchid-core';\nimport { DefaultColumnTypes, DefaultSchemaConfig } from 'pqb';\n\nrakeDbCommands.g = rakeDbCommands.generate = {\n run: generate,\n help: 'gen migration from OrchidORM tables',\n helpArguments: {\n 'no arguments': '\"generated\" is a default file name',\n 'migration-name': 'set migration file name',\n up: 'auto-apply migration',\n 'migration-name up': 'with a custom name and apply it',\n },\n helpAfter: 'reset',\n};\n\nrakeDbCommands.pull.run = pull;\nrakeDbCommands.pull.help =\n 'generate ORM tables and a migration for an existing database';\n\ndeclare module 'rake-db' {\n export interface RakeDbConfig<\n SchemaConfig extends ColumnSchemaConfig,\n CT = DefaultColumnTypes<DefaultSchemaConfig>,\n > {\n dbPath?: string;\n dbExportedAs?: string;\n generateTableTo?(tableName: string): string;\n }\n\n export interface InputRakeDbConfigBase<\n SchemaConfig extends ColumnSchemaConfig,\n CT,\n > {\n dbPath?: string;\n dbExportedAs?: string;\n generateTableTo?(tableName: string): string;\n }\n}\n"],"names":["inDb","name","promptSelect","colors","item","getSchemaAndTableFromName","getDbTableColumnsChecks","dbColumnToAst","toSnakeCase","index","column","instantiateDbColumn","ArrayColumn","type","DomainColumn","EnumColumn","deepCompare","concatSchemaAndName","key","encodeColumnDefault","RawSQL","codeEnum","toArray","i","getIndexName","getConstraintName","tableToAst","codeTable","getDbStructureTableData","VirtualColumn","makeDomainsMap","astToMigration","createMigrationInterface","introspectDbSchema","pluralize","changes","code","addCode","exhaustive","codeToString","makeStructureToAstCtx","makeFileVersion","writeMigrationFile","migrate","pathToFileURL","path","UnknownColumn","defaultSchemaConfig","toCamelCase","toPascalCase","getImportPath","singleQuote","columnsShapeToCode","pushTableDataCode","quoteObjectKey","Adapter","structureToAst","content","options","pathToLog","adapter","saveMigratedVersion","rakeDbCommands"],"mappings":"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"}
|