@sequenceholdings/orm 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/authoring.cjs +794 -0
- package/dist/authoring.cjs.map +1 -0
- package/dist/authoring.d.cts +274 -0
- package/dist/authoring.d.ts +274 -0
- package/dist/authoring.js +763 -0
- package/dist/authoring.js.map +1 -0
- package/dist/canonical.cjs +146 -0
- package/dist/canonical.cjs.map +1 -0
- package/dist/canonical.d.cts +369 -0
- package/dist/canonical.d.ts +369 -0
- package/dist/canonical.js +131 -0
- package/dist/canonical.js.map +1 -0
- package/dist/cli.cjs +6172 -1683
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.d.cts +8 -1
- package/dist/cli.d.ts +8 -1
- package/dist/cli.js +6172 -1685
- package/dist/cli.js.map +1 -1
- package/dist/client.cjs +120 -0
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +74 -2
- package/dist/client.d.ts +74 -2
- package/dist/client.js +116 -1
- package/dist/client.js.map +1 -1
- package/dist/compiler.cjs +3001 -0
- package/dist/compiler.cjs.map +1 -0
- package/dist/compiler.d.cts +581 -0
- package/dist/compiler.d.ts +581 -0
- package/dist/compiler.js +2947 -0
- package/dist/compiler.js.map +1 -0
- package/dist/index.cjs +1705 -326
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +117 -56
- package/dist/index.d.ts +117 -56
- package/dist/index.js +1619 -323
- package/dist/index.js.map +1 -1
- package/dist/ir.cjs +407 -0
- package/dist/ir.cjs.map +1 -0
- package/dist/ir.d.cts +1179 -0
- package/dist/ir.d.ts +1179 -0
- package/dist/ir.js +388 -0
- package/dist/ir.js.map +1 -0
- package/dist/naming-CTvWSRTf.d.ts +79 -0
- package/dist/naming-DRyinU4u.d.cts +79 -0
- package/dist/sdl.cjs +833 -0
- package/dist/sdl.cjs.map +1 -0
- package/dist/sdl.d.cts +96 -0
- package/dist/sdl.d.ts +96 -0
- package/dist/sdl.js +809 -0
- package/dist/sdl.js.map +1 -0
- package/package.json +36 -3
- package/src/codegen-gql/apollo-hooks.cjs +98 -0
- package/src/codegen-gql/server-fns.cjs +101 -0
- package/templates/README.md +13 -0
- package/templates/orm-namespace/CLAUDE.md +81 -0
- package/templates/orm-namespace/codegen.ts +22 -0
- package/templates/orm-namespace/gitignore +5 -0
- package/templates/orm-namespace/graphql/example/queries.ts +56 -0
- package/templates/orm-namespace/package.json +24 -0
- package/templates/orm-namespace/schema/tables.ts +71 -0
- package/templates/orm-namespace/sequence.config.ts +32 -0
- package/templates/orm-namespace/tsconfig.json +15 -0
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/codegen/types.ts","../src/constants.ts","../src/errors.ts","../src/predicate/ast.ts","../src/schema/identifiers.ts","../src/schema/columns.ts","../src/predicate/parse.ts","../src/schema/predicates.ts","../src/schema/actions.ts","../src/engine/types.ts","../src/compiler/sql.ts","../src/compiler/predicates.ts","../src/compiler/actions.ts","../src/engine/actions.ts","../src/schema/table.ts","../src/engine/security.ts","../src/engine/columns.ts","../src/engine/tables.ts","../src/engine/snapshot.ts","../src/engine/converge.ts","../src/engine/index.ts","../src/hash.ts","../src/schema/custom-roles-block.ts","../src/schema/namespace.ts","../src/schema/namespace-config.ts","../src/loader.ts","../src/migrations/classify.ts","../src/migrations/workspace.ts","../src/migrations/committed.ts","../src/migrations/diff.ts","../src/schema/canonical.ts"],"names":["z","index","sql","QUOTED_STRING_PATTERN","policyName","uuid","text","integer","bigint","numeric","doublePrecision","boolean","timestamp","date","jsonb","pgSchema","uniqueIndex","foreignKey","previousId","generateDrizzleJson","upPgSnapshot","generateMigration","pushSchema","createHash","readFile","join","loadYaml","extname","readdir","path","mkdir","writeFile"],"mappings":";;;;;;;;;;;;AAWA,IAAM,UAAA,GAAmD;AAAA,EACvD,IAAA,EAAM,QAAA;AAAA,EACN,IAAA,EAAM,QAAA;AAAA,EACN,OAAA,EAAS,QAAA;AAAA,EACT,MAAA,EAAQ,QAAA;AAAA,EACR,OAAA,EAAS,QAAA;AAAA,EACT,MAAA,EAAQ,QAAA;AAAA,EACR,OAAA,EAAS,SAAA;AAAA,EACT,WAAA,EAAa,QAAA;AAAA,EACb,IAAA,EAAM,QAAA;AAAA,EACN,KAAA,EAAO;AACT,CAAA;AAUO,SAAS,uBAAuB,UAAA,EAAyC;AAC9E,EAAA,MAAM,KAAA,GAAkB;AAAA,IACtB,CAAA,mDAAA,EAAsD,WAAW,SAAS,CAAA,iCAAA,CAAA;AAAA,IAC1E,EAAA;AAAA,IACA,CAAA,YAAA,EAAe,kBAAA,CAAmB,UAAA,CAAW,SAAS,CAAC,CAAA,IAAA;AAAA,GACzD;AACA,EAAA,KAAA,MAAW,KAAA,IAAS,WAAW,MAAA,EAAQ;AACrC,IAAA,IAAI,MAAM,MAAA,EAAQ;AAIhB,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,kBAAA,EAAqB,KAAA,CAAM,MAAM,CAAA,2CAAA,CAAwC,CAAA;AACpF,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,KAAA,CAAM,KAAK,CAAA,yBAAA,CAA2B,CAAA;AACtD,MAAA;AAAA,IACF;AACA,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,KAAA,CAAM,KAAK,CAAA,GAAA,CAAK,CAAA;AAChC,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,MAAM,CAAA,IAAK,MAAA,CAAO,QAAQ,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA,EAAG;AAGhE,MAAA,IAAI,OAAO,UAAA,EAAY;AACvB,MAAA,KAAA,CAAM,KAAK,CAAA,IAAA,EAAO,IAAI,KAAK,cAAA,CAAe,MAAM,CAAC,CAAA,CAAE,CAAA;AAAA,IACrD;AACA,IAAA,KAAA,CAAM,KAAK,KAAK,CAAA;AAAA,EAClB;AACA,EAAA,KAAA,CAAM,IAAA,CAAK,KAAK,EAAE,CAAA;AAClB,EAAA,KAAA,CAAM,IAAA,CAAK,GAAG,eAAA,CAAgB,UAAU,CAAC,CAAA;AACzC,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AASA,SAAS,gBAAgB,UAAA,EAA2C;AAClE,EAAA,MAAM,OAAA,GAAU,UAAA,CAAW,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,KAAU,MAAA,CAAO,OAAA,CAAQ,KAAA,CAAM,OAAA,IAAW,EAAE,CAAC,CAAA;AACxF,EAAA,MAAM,QAAQ,CAAC,CAAA,YAAA,EAAe,qBAAqB,UAAA,CAAW,SAAS,CAAC,CAAA,IAAA,CAAM,CAAA;AAC9E,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,MAAM,CAAA,IAAK,OAAA,CAAQ,KAAK,CAAC,CAAC,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA,KAAM,EAAE,aAAA,CAAc,CAAC,CAAC,CAAA,EAAG;AAC3E,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,IAAI,CAAA,YAAA,EAAe,gBAAA,CAAiB,MAAM,CAAC,CAAA,UAAA,EAAa,gBAAA,CAAiB,MAAM,CAAC,CAAA,EAAA,CAAI,CAAA;AAAA,EACtG;AACA,EAAA,KAAA,CAAM,IAAA,CAAK,KAAK,EAAE,CAAA;AAClB,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,iBAAiB,MAAA,EAAkC;AAC1D,EAAA,MAAM,UAAU,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,MAAA,IAAU,EAAE,CAAA;AAClD,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,sBAAA;AACjC,EAAA,MAAM,SAAS,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,KAAK,CAAA,KAAM;AAC5C,IAAA,MAAM,IAAA,GAAO,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA;AAClC,IAAA,OAAO,KAAA,CAAM,QAAA,GAAW,CAAA,EAAG,IAAI,CAAA,GAAA,EAAM,IAAI,CAAA,OAAA,CAAA,GAAY,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA;AAAA,EACvE,CAAC,CAAA;AACD,EAAA,OAAO,CAAA,EAAA,EAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,CAAA;AAC/B;AAEA,SAAS,iBAAiB,MAAA,EAAkC;AAC1D,EAAA,IAAI,CAAC,MAAA,CAAO,OAAA,EAAS,OAAO,0BAAA;AAG5B,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,OAAO,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,IAAI,CAAA,KAAM;AACnE,IAAA,MAAM,IAAA,GAAO,WAAW,IAAI,CAAA;AAC5B,IAAA,OAAO,IAAA,KAAS,SAAA,GAAY,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA,GAAK,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,IAAI,CAAA,OAAA,CAAA;AAAA,EACnE,CAAC,CAAA;AACD,EAAA,OAAO,CAAA,gBAAA,EAAmB,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,KAAA,CAAA;AAC9C;AAEO,SAAS,mBAAmB,SAAA,EAA2B;AAC5D,EAAA,OAAO,CAAA,EAAG,UAAA,CAAW,SAAS,CAAC,CAAA,MAAA,CAAA;AACjC;AAEO,SAAS,qBAAqB,SAAA,EAA2B;AAC9D,EAAA,OAAO,CAAA,EAAG,UAAA,CAAW,SAAS,CAAC,CAAA,OAAA,CAAA;AACjC;AAEA,SAAS,WAAW,SAAA,EAA2B;AAC7C,EAAA,OAAO,UACJ,KAAA,CAAM,GAAG,EACT,GAAA,CAAI,CAAC,SAAS,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,KAAgB,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CAC1D,KAAK,EAAE,CAAA;AACZ;AAEA,SAAS,eAAe,MAAA,EAAkC;AACxD,EAAA,MAAM,IAAA,GAAO,UAAA,CAAW,MAAA,CAAO,IAAI,CAAA;AACnC,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,WAAA,KAAgB,IAAA,IAAQ,OAAO,QAAA,KAAa,KAAA;AACnE,EAAA,OAAO,OAAA,IAAW,IAAA,KAAS,SAAA,GAAY,IAAA,GAAO,GAAG,IAAI,CAAA,OAAA,CAAA;AACvD;;;ACrHO,IAAM,iBAAA,GAAoB;AAE1B,IAAM,kBAAA,GAAqB;AAC3B,IAAM,qBAAA,GAAwB;AAQ9B,IAAM,qBAAA,GAAwB;AAW9B,IAAM,6BAAA,GAAgC;AAUtC,IAAM,sBAAA,GAAyB;AAE/B,IAAM,iBAAA,GAAoB;AAG1B,IAAM,uBAAA,GAA0B;AAGhC,IAAM,qBAAA,GAAwB;AAE9B,IAAM,iBAAA,GAAoB;AAC1B,IAAM,oBAAA,GAAuB;AAE7B,IAAM,gBAAgB,CAAC,SAAA,KAA8B,CAAA,EAAG,iBAAiB,GAAG,SAAS,CAAA;AACrF,IAAM,gBAAA,GAAmB,CAAC,SAAA,KAC/B,CAAA,EAAG,iBAAiB,CAAA,EAAG,SAAS,GAAG,oBAAoB,CAAA;AAElD,IAAM,0BAAA,GAA6B,CAAC,MAAA,EAAQ,OAAO;AAGnD,IAAM,6CAA6B,IAAI,GAAA,CAAI,CAAC,gBAAA,EAAkB,eAAe,CAAC;AAE9E,IAAM,WAAA,GAAc;AAQpB,IAAM,4BAA4B,IAAA,GAAO;AAGzC,IAAM,uCAAuB,IAAI,GAAA,CAAI,CAAC,SAAA,EAAW,OAAO,CAAC;AAOzD,IAAM,qBAAA,uBAA4B,GAAA,CAAI,CAAC,UAAU,OAAA,EAAS,OAAA,EAAS,QAAQ,CAAC;;;ACzE5E,IAAM,kBAAA,GAAN,cAAiC,KAAA,CAAM;AAAA,EAG5C,WAAA,CACE,SACS,IAAA,EACT;AACA,IAAA,KAAA,CAAM,OAAO,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,OAAO,KAAK,OAAO,CAAA;AAFnC,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAGX;AAAA,EAPkB,IAAA,GAAO,oBAAA;AAQ3B;AAEO,IAAM,mBAAA,GAAN,cAAkC,KAAA,CAAM;AAAA,EAG7C,WAAA,CACE,SACS,QAAA,EACT;AACA,IAAA,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,cAAA,EAAiB,QAAQ,CAAA,CAAA,CAAG,CAAA;AAFnC,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA,EAGX;AAAA,EAPkB,IAAA,GAAO,qBAAA;AAQ3B;;;ACpBO,IAAM,cAAc,CAAC,GAAA,EAAK,MAAM,GAAA,EAAK,IAAA,EAAM,KAAK,IAAI;AAoBpD,SAAS,aAAA,CAAc,WAAsB,KAAA,EAAwC;AAC1F,EAAA,KAAA,CAAM,SAAS,CAAA;AACf,EAAA,IAAI,SAAA,CAAU,IAAA,KAAS,KAAA,IAAS,SAAA,CAAU,SAAS,IAAA,EAAM;AACvD,IAAA,KAAA,MAAW,OAAA,IAAW,SAAA,CAAU,QAAA,EAAU,aAAA,CAAc,SAAS,KAAK,CAAA;AAAA,EACxE;AACA,EAAA,IAAI,UAAU,IAAA,KAAS,KAAA,EAAO,aAAA,CAAc,SAAA,CAAU,SAAS,KAAK,CAAA;AACtE;AAEO,SAAS,kBAAkB,SAAA,EAAiC;AACjE,EAAA,MAAM,WAAsB,EAAC;AAC7B,EAAA,aAAA,CAAc,SAAA,EAAW,CAAC,IAAA,KAAS;AACjC,IAAA,IAAI,IAAA,CAAK,SAAS,SAAA,EAAW,QAAA,CAAS,KAAK,IAAA,CAAK,IAAA,EAAM,KAAK,KAAK,CAAA;AAAA,EAClE,CAAC,CAAA;AACD,EAAA,OAAO,QAAA;AACT;AAEO,SAAS,kBAAkB,SAAA,EAAgC;AAChE,EAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,SAAS,CAAA,CAAE,OAAA;AAAA,IAAQ,CAAC,YAClD,OAAA,CAAQ,IAAA,KAAS,WAAW,CAAC,OAAA,CAAQ,IAAI,CAAA,GAAI;AAAC,GAChD;AACA,EAAA,OAAO,CAAC,GAAG,IAAI,GAAA,CAAI,KAAK,CAAC,CAAA;AAC3B;AAEO,SAAS,uBAAuB,SAAA,EAAgC;AACrE,EAAA,MAAM,OAAiB,EAAC;AACxB,EAAA,aAAA,CAAc,SAAA,EAAW,CAAC,IAAA,KAAS;AACjC,IAAA,IAAI,KAAK,IAAA,KAAS,YAAA,EAAc,IAAA,CAAK,IAAA,CAAK,KAAK,GAAG,CAAA;AAAA,EACpD,CAAC,CAAA;AACD,EAAA,OAAO,CAAC,GAAG,IAAI,GAAA,CAAI,IAAI,CAAC,CAAA;AAC1B;ACzCO,IAAM,gBAAA,GAAmBA,MAC7B,MAAA,EAAO,CACP,IAAI,qBAAqB,CAAA,CACzB,KAAA,CAAM,kBAAA,EAAoB,8CAA8C;AAEpE,IAAM,kBAAkBA,KAAA,CAC5B,MAAA,EAAO,CACP,KAAA,CAAM,mBAAmB,sEAAsE;AAG3F,IAAM,oBAAA,GAAuBA,KAAA,CACjC,MAAA,EAAO,CACP,MAAA;AAAA,EACC,CAAC,UAAU,kBAAA,CAAmB,IAAA,CAAK,KAAK,CAAA,IAAK,uBAAA,CAAwB,KAAK,KAAK,CAAA;AAAA,EAC/E;AACF;AAEK,IAAM,oBAAA,GAAuB,CAAC,SAAA,KAA+B,SAAA,CAAU,SAAS,GAAG;;;ACtBnF,IAAM,YAAA,GAAe;AAAA,EAC1B,MAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF;AAIO,IAAM,gBAAA,GAAmBA,KAAAA,CAAE,IAAA,CAAK,YAAY;AAEnD,IAAM,iBAAA,GAAqE;AAAA,EACzE,mBAAA,EAAqB,CAAC,MAAM,CAAA;AAAA,EAC5B,OAAA,EAAS,CAAC,aAAA,EAAe,MAAM;AACjC,CAAA;AAEA,IAAM,YAAA,GAAe,+BAAA;AAQd,IAAM,iBAAA,GAAoB,CAAC,KAAA,EAAsB,IAAA,KACtD,OAAO,KAAA,KAAU,QAAA,KAAa,iBAAA,CAAkB,KAAK,CAAA,EAAG,QAAA,CAAS,IAAI,CAAA,IAAK,KAAA;AAgB5E,SAAS,YAAA,CAAa,OAAsB,IAAA,EAAiC;AAC3E,EAAA,IAAI,OAAO,UAAU,SAAA,EAAW,OAAO,SAAS,SAAA,GAAY,IAAA,GAAO,wCAAwC,IAAI,CAAA,CAAA,CAAA;AAC/G,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,IAAI,CAAC,CAAC,SAAA,EAAW,QAAA,EAAU,WAAW,QAAQ,CAAA,CAAE,QAAA,CAAS,IAAI,CAAA,EAAG;AAC9D,MAAA,OAAO,wCAAwC,IAAI,CAAA,CAAA,CAAA;AAAA,IACrD;AACA,IAAA,IAAI,CAAC,SAAA,EAAW,QAAQ,CAAA,CAAE,QAAA,CAAS,IAAI,CAAA,EAAG;AACxC,MAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,EAAG,OAAO,qBAAqB,IAAI,CAAA,oBAAA,CAAA;AAC9D,MAAA,IAAI,CAAC,MAAA,CAAO,aAAA,CAAc,KAAK,CAAA,EAAG;AAChC,QAAA,OAAO,qBAAqB,IAAI,CAAA,6EAAA,CAAA;AAAA,MAClC;AAAA,IACF;AAIA,IAAA,IAAI,SAAS,SAAA,IAAa,IAAA,CAAK,IAAI,KAAK,CAAA,GAAI,OAAO,gBAAA,EAAkB;AACnE,MAAA,OAAO,4HAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,MAAM,YAAA,GAAe,kBAAkB,KAAK,CAAA;AAC5C,EAAA,IAAI,YAAA,EAAc,OAAO,YAAA,CAAa,QAAA,CAAS,IAAI,IAAI,IAAA,GAAO,CAAA,SAAA,EAAY,KAAK,CAAA,uBAAA,EAA0B,IAAI,CAAA,CAAA,CAAA;AAK7G,EAAA,OAAO,IAAA;AACT;AAEO,IAAM,YAAA,GAAeA,MACzB,YAAA,CAAa;AAAA,EACZ,IAAA,EAAM,gBAAA;AAAA,EACN,WAAA,EAAaA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAClC,QAAA,EAAUA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC/B,MAAA,EAAQA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC7B,OAAA,EAASA,KAAAA,CAAE,KAAA,CAAM,CAACA,MAAE,MAAA,EAAO,EAAGA,KAAAA,CAAE,MAAA,IAAUA,KAAAA,CAAE,OAAA,EAAS,CAAC,EAAE,QAAA,EAAS;AAAA,EACjE,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,YAAA,EAAc,iBAAiB,QAAA,EAAS;AAAA,EACxC,IAAA,EAAMA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC1B,UAAA,EAAYA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AAC1B,CAAC,CAAA,CACA,WAAA,CAAY,CAAC,MAAA,EAAQ,GAAA,KAAQ;AAC5B,EAAA,IAAI,MAAA,CAAO,YAAY,MAAA,EAAW;AAChC,IAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,MAAA,CAAO,OAAA,EAAS,OAAO,IAAI,CAAA;AACtD,IAAA,IAAI,KAAA,EAAO,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,KAAA,EAAO,IAAA,EAAM,CAAC,SAAS,CAAA,EAAG,CAAA;AAAA,EAC/E;AACA,EAAA,IAAI,MAAA,CAAO,WAAA,IAAe,MAAA,CAAO,QAAA,EAAU;AACzC,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,2CAA2C,IAAA,EAAM,CAAC,UAAU,CAAA,EAAG,CAAA;AAAA,EACzG;AACA,EAAA,IAAI,MAAA,CAAO,WAAA,IAAe,MAAA,CAAO,UAAA,EAAY;AAC3C,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,6CAA6C,IAAA,EAAM,CAAC,YAAY,CAAA,EAAG,CAAA;AAAA,EAC7G;AACA,EAAA,IAAI,OAAO,IAAA,IAAQ,CAAC,aAAa,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA,EAAG;AAClD,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,+CAA+C,IAAA,EAAM,CAAC,MAAM,CAAA,EAAG,CAAA;AAAA,EACzG;AACF,CAAC;AAEI,SAAS,UAAU,IAAA,EAAuD;AAC/E,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AACpC,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,OAAO,EAAE,QAAQ,KAAA,CAAM,CAAC,GAAa,IAAA,EAAM,KAAA,CAAM,CAAC,CAAA,EAAY;AAChE;;;ACrGA,IAAM,QAAA,mBAAW,IAAI,GAAA,CAAI,CAAC,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,OAAA,EAAS,MAAA,EAAQ,OAAA,EAAS,YAAY,CAAC,CAAA;AAC7F,IAAM,gBAAA,GAAmB,sBAAA;AACzB,IAAM,gBAAA,GAAmB,QAAA;AACzB,IAAM,eAAA,GAAkB,aAAA;AACxB,IAAM,cAAA,GAAiB,gBAAA;AAEvB,SAAS,SAAS,MAAA,EAAyB;AACzC,EAAA,MAAM,SAAkB,EAAC;AACzB,EAAA,IAAI,QAAA,GAAW,CAAA;AAEf,EAAA,OAAO,QAAA,GAAW,OAAO,MAAA,EAAQ;AAC/B,IAAA,MAAM,IAAA,GAAO,OAAO,QAAQ,CAAA;AAE5B,IAAA,IAAI,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,EAAG;AACnB,MAAA,QAAA,IAAY,CAAA;AACZ,MAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,UAAU,KAAA,EAAO,IAAA,EAAM,UAAU,CAAA;AACrD,MAAA,QAAA,IAAY,CAAA;AACZ,MAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,UAAU,KAAA,EAAO,IAAA,EAAM,UAAU,CAAA;AACrD,MAAA,QAAA,IAAY,CAAA;AACZ,MAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,SAAS,KAAA,EAAO,IAAA,EAAM,UAAU,CAAA;AACpD,MAAA,QAAA,IAAY,CAAA;AACZ,MAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,MAAM,EAAE,KAAA,EAAO,GAAA,EAAI,GAAI,UAAA,CAAW,QAAQ,QAAQ,CAAA;AAClD,MAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,UAAU,CAAA;AAC/C,MAAA,QAAA,GAAW,GAAA;AACX,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,WAAW,gBAAA,CAAiB,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,QAAQ,CAAC,CAAA;AAC7D,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAM,QAAQ,QAAA,CAAS,CAAC,MAAM,IAAA,GAAO,IAAA,GAAO,SAAS,CAAC,CAAA;AACtD,MAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,UAAA,EAAY,KAAA,EAAO,UAAU,CAAA;AACjD,MAAA,QAAA,IAAY,QAAA,CAAS,CAAC,CAAA,CAAE,MAAA;AACxB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,SAAS,cAAA,CAAe,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,QAAQ,CAAC,CAAA;AACzD,IAAA,IAAI,MAAA,IAAU,CAAC,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAA,EAAG;AAC1C,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,OAAO,MAAA,CAAO,CAAC,CAAA,EAAG,QAAA,EAAU,CAAA;AAC1D,MAAA,QAAA,IAAY,MAAA,CAAO,CAAC,CAAA,CAAE,MAAA;AACtB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAA,EAAG;AAC/B,MAAA,IAAI,GAAA,GAAM,QAAA;AACV,MAAA,OAAO,GAAA,GAAM,OAAO,MAAA,IAAU,eAAA,CAAgB,KAAK,MAAA,CAAO,GAAG,CAAW,CAAA,EAAG,GAAA,IAAO,CAAA;AAClF,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,YAAA,EAAc,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,QAAA,EAAU,GAAG,CAAA,EAAG,QAAA,EAAU,CAAA;AAChF,MAAA,QAAA,GAAW,GAAA;AACX,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,IAAI,mBAAA,CAAoB,CAAA,sBAAA,EAAyB,IAAI,KAAK,QAAQ,CAAA;AAAA,EAC1E;AAEA,EAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,EAAO,OAAO,EAAA,EAAI,QAAA,EAAU,MAAA,CAAO,MAAA,EAAQ,CAAA;AAC/D,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,UAAA,CAAW,QAAgB,KAAA,EAA+C;AACjF,EAAA,IAAI,KAAA,GAAQ,EAAA;AACZ,EAAA,IAAI,WAAW,KAAA,GAAQ,CAAA;AACvB,EAAA,OAAO,QAAA,GAAW,OAAO,MAAA,EAAQ;AAC/B,IAAA,MAAM,IAAA,GAAO,OAAO,QAAQ,CAAA;AAC5B,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,KAAA,IAAS,IAAA;AACT,MAAA,QAAA,IAAY,CAAA;AACZ,MAAA;AAAA,IACF;AACA,IAAA,IAAI,MAAA,CAAO,QAAA,GAAW,CAAC,CAAA,KAAM,GAAA,EAAK;AAChC,MAAA,KAAA,IAAS,GAAA;AACT,MAAA,QAAA,IAAY,CAAA;AACZ,MAAA;AAAA,IACF;AACA,IAAA,OAAO,EAAE,KAAA,EAAO,GAAA,EAAK,QAAA,GAAW,CAAA,EAAE;AAAA,EACpC;AACA,EAAA,MAAM,IAAI,mBAAA,CAAoB,6BAAA,EAA+B,KAAK,CAAA;AACpE;AAEA,IAAM,SAAN,MAAa;AAAA,EAGX,YAA6B,MAAA,EAAiB;AAAjB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAAkB;AAAA,EAFvC,KAAA,GAAQ,CAAA;AAAA,EAIhB,KAAA,GAAmB;AACjB,IAAA,MAAM,SAAA,GAAY,KAAK,OAAA,EAAQ;AAC/B,IAAA,IAAA,CAAK,MAAA,CAAO,OAAO,mBAAmB,CAAA;AACtC,IAAA,OAAO,SAAA;AAAA,EACT;AAAA,EAEQ,OAAA,GAAqB;AAC3B,IAAA,MAAM,QAAA,GAAW,CAAC,IAAA,CAAK,QAAA,EAAU,CAAA;AACjC,IAAA,OAAO,IAAA,CAAK,aAAa,IAAI,CAAA,WAAY,IAAA,CAAK,IAAA,CAAK,UAAU,CAAA;AAC7D,IAAA,OAAO,QAAA,CAAS,WAAW,CAAA,GAAK,QAAA,CAAS,CAAC,CAAA,GAAkB,EAAE,IAAA,EAAM,IAAA,EAAM,QAAA,EAAS;AAAA,EACrF;AAAA,EAEQ,QAAA,GAAsB;AAC5B,IAAA,MAAM,QAAA,GAAW,CAAC,IAAA,CAAK,QAAA,EAAU,CAAA;AACjC,IAAA,OAAO,IAAA,CAAK,aAAa,KAAK,CAAA,WAAY,IAAA,CAAK,IAAA,CAAK,UAAU,CAAA;AAC9D,IAAA,OAAO,QAAA,CAAS,WAAW,CAAA,GAAK,QAAA,CAAS,CAAC,CAAA,GAAkB,EAAE,IAAA,EAAM,KAAA,EAAO,QAAA,EAAS;AAAA,EACtF;AAAA,EAEQ,QAAA,GAAsB;AAC5B,IAAA,IAAI,IAAA,CAAK,YAAA,CAAa,KAAK,CAAA,EAAG,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,OAAA,EAAS,IAAA,CAAK,QAAA,EAAS,EAAE;AAC7E,IAAA,OAAO,KAAK,YAAA,EAAa;AAAA,EAC3B;AAAA,EAEQ,YAAA,GAA0B;AAChC,IAAA,IAAI,IAAA,CAAK,IAAA,EAAK,CAAE,IAAA,KAAS,QAAA,EAAU;AACjC,MAAA,IAAA,CAAK,OAAA,EAAQ;AACb,MAAA,MAAM,KAAA,GAAQ,KAAK,OAAA,EAAQ;AAC3B,MAAA,IAAA,CAAK,MAAA,CAAO,UAAU,KAAK,CAAA;AAC3B,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,IAAI,IAAA,CAAK,WAAA,CAAY,YAAY,CAAA,EAAG;AAClC,MAAA,MAAM,UAAA,GAAa,KAAK,eAAA,EAAgB;AACxC,MAAA,MAAM,IAAA,GAAO,KAAK,IAAA,EAAK;AACvB,MAAA,IAAI,IAAA,CAAK,SAAS,UAAA,EAAY;AAC5B,QAAA,MAAM,IAAI,mBAAA,CAAoB,kEAAA,EAAoE,IAAA,CAAK,QAAQ,CAAA;AAAA,MACjH;AACA,MAAA,OAAO,UAAA;AAAA,IACT;AACA,IAAA,OAAO,KAAK,eAAA,EAAgB;AAAA,EAC9B;AAAA,EAEQ,eAAA,GAA6B;AACnC,IAAA,IAAA,CAAK,OAAA,EAAQ;AACb,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,iBAAA,CAAkB,YAAY,CAAA;AAC/C,IAAA,IAAI,CAAC,sBAAA,CAAuB,IAAA,CAAK,GAAG,CAAA,EAAG;AACrC,MAAA,MAAM,IAAI,oBAAoB,CAAA,wBAAA,EAA2B,GAAG,KAAK,IAAA,CAAK,IAAA,GAAO,QAAQ,CAAA;AAAA,IACvF;AACA,IAAA,OAAO,EAAE,IAAA,EAAM,YAAA,EAAc,GAAA,EAAI;AAAA,EACnC;AAAA,EAEQ,eAAA,GAA6B;AACnC,IAAA,MAAM,IAAA,GAAO,KAAK,YAAA,EAAa;AAC/B,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,UAAA,EAAY,uBAAuB,CAAA;AAChE,IAAA,IAAI,CAAC,WAAA,CAAY,QAAA,CAAS,QAAA,CAAS,KAAkB,CAAA,EAAG;AACtD,MAAA,MAAM,IAAI,mBAAA,CAAoB,CAAA,sBAAA,EAAyB,SAAS,KAAK,CAAA,CAAA,CAAA,EAAK,SAAS,QAAQ,CAAA;AAAA,IAC7F;AACA,IAAA,MAAM,KAAA,GAAQ,KAAK,YAAA,EAAa;AAChC,IAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,IAAI,QAAA,CAAS,KAAA,EAAoB,MAAM,KAAA,EAAM;AAAA,EACzE;AAAA,EAEQ,YAAA,GAAwB;AAC9B,IAAA,MAAM,KAAA,GAAQ,KAAK,IAAA,EAAK;AAExB,IAAA,IAAI,KAAA,CAAM,SAAS,QAAA,EAAU;AAC3B,MAAA,IAAA,CAAK,OAAA,EAAQ;AACb,MAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA,EAAO,MAAM,KAAA,EAAM;AAAA,IAC/C;AACA,IAAA,IAAI,KAAA,CAAM,SAAS,QAAA,EAAU;AAC3B,MAAA,IAAA,CAAK,OAAA,EAAQ;AACb,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA;AAGhC,MAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,IAAM,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,IAAK,CAAC,MAAA,CAAO,aAAA,CAAc,KAAK,CAAA,EAAI;AACxF,QAAA,MAAM,IAAI,mBAAA;AAAA,UACR,CAAA,iBAAA,EAAoB,MAAM,KAAK,CAAA,4DAAA,CAAA;AAAA,UAC/B,KAAA,CAAM;AAAA,SACR;AAAA,MACF;AACA,MAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA,EAAM;AAAA,IAClC;AACA,IAAA,IAAI,KAAA,CAAM,SAAS,YAAA,EAAc;AAC/B,MAAA,MAAM,IAAI,oBAAoB,CAAA,0BAAA,EAA6B,KAAA,CAAM,SAAS,KAAK,CAAA,CAAA,CAAA,EAAK,MAAM,QAAQ,CAAA;AAAA,IACpG;AAEA,IAAA,IAAA,CAAK,OAAA,EAAQ;AACb,IAAA,IAAI,KAAA,CAAM,KAAA,KAAU,MAAA,IAAU,KAAA,CAAM,UAAU,OAAA,EAAS;AACrD,MAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA,EAAO,KAAA,CAAM,UAAU,MAAA,EAAO;AAAA,IAC1D;AACA,IAAA,IAAI,KAAA,CAAM,UAAU,MAAA,EAAQ,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,OAAO,IAAA,EAAK;AAClE,IAAA,IAAI,KAAA,CAAM,UAAU,OAAA,EAAS;AAC3B,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,iBAAA,CAAkB,OAAO,CAAA;AAC1C,MAAA,IAAI,CAAC,iBAAA,CAAkB,IAAA,CAAK,GAAG,CAAA,EAAG;AAChC,QAAA,MAAM,IAAI,mBAAA,CAAoB,CAAA,mBAAA,EAAsB,GAAG,CAAA,CAAA,CAAA,EAAK,MAAM,QAAQ,CAAA;AAAA,MAC5E;AACA,MAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,GAAA,EAAI;AAAA,IAC9B;AACA,IAAA,IAAI,KAAA,CAAM,UAAU,YAAA,EAAc;AAChC,MAAA,MAAM,IAAI,mBAAA,CAAoB,kEAAA,EAAoE,KAAA,CAAM,QAAQ,CAAA;AAAA,IAClH;AACA,IAAA,IAAI,QAAA,CAAS,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA,IAAK,CAAC,kBAAA,CAAmB,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,EAAG;AACtE,MAAA,MAAM,IAAI,mBAAA,CAAoB,CAAA,0BAAA,EAA6B,MAAM,KAAK,CAAA,CAAA,CAAA,EAAK,MAAM,QAAQ,CAAA;AAAA,IAC3F;AACA,IAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,MAAM,KAAA,EAAM;AAAA,EAC7C;AAAA,EAEQ,kBAAkB,EAAA,EAAoC;AAC5D,IAAA,IAAA,CAAK,MAAA,CAAO,QAAA,EAAU,CAAA,UAAA,EAAa,EAAE,CAAA,CAAE,CAAA;AACvC,IAAA,MAAM,WAAW,IAAA,CAAK,MAAA,CAAO,QAAA,EAAU,CAAA,gBAAA,EAAmB,EAAE,CAAA,KAAA,CAAO,CAAA;AACnE,IAAA,IAAA,CAAK,MAAA,CAAO,QAAA,EAAU,CAAA,UAAA,EAAa,EAAE,CAAA,IAAA,CAAM,CAAA;AAC3C,IAAA,OAAO,QAAA,CAAS,KAAA;AAAA,EAClB;AAAA,EAEQ,IAAA,GAAc;AACpB,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AAAA,EAC/B;AAAA,EAEQ,YAAY,OAAA,EAA0B;AAC5C,IAAA,MAAM,KAAA,GAAQ,KAAK,IAAA,EAAK;AACxB,IAAA,OAAO,KAAA,CAAM,IAAA,KAAS,YAAA,IAAgB,KAAA,CAAM,KAAA,KAAU,OAAA;AAAA,EACxD;AAAA,EAEQ,aAAa,OAAA,EAA0B;AAC7C,IAAA,IAAI,CAAC,IAAA,CAAK,WAAA,CAAY,OAAO,GAAG,OAAO,KAAA;AACvC,IAAA,IAAA,CAAK,OAAA,EAAQ;AACb,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,OAAA,GAAiB;AACvB,IAAA,MAAM,KAAA,GAAQ,KAAK,IAAA,EAAK;AACxB,IAAA,IAAI,KAAA,CAAM,IAAA,KAAS,KAAA,EAAO,IAAA,CAAK,KAAA,IAAS,CAAA;AACxC,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEQ,MAAA,CAAO,MAAiB,WAAA,EAA4B;AAC1D,IAAA,MAAM,KAAA,GAAQ,KAAK,IAAA,EAAK;AACxB,IAAA,IAAI,KAAA,CAAM,SAAS,IAAA,EAAM;AACvB,MAAA,MAAM,IAAI,mBAAA,CAAoB,CAAA,SAAA,EAAY,WAAW,CAAA,OAAA,EAAU,MAAM,KAAA,IAAS,KAAK,CAAA,CAAA,CAAA,EAAK,KAAA,CAAM,QAAQ,CAAA;AAAA,IACxG;AACA,IAAA,OAAO,KAAK,OAAA,EAAQ;AAAA,EACtB;AACF,CAAA;AAEO,SAAS,eAAe,MAAA,EAAiC;AAC9D,EAAA,MAAM,OAAA,GAAU,OAAO,IAAA,EAAK;AAC5B,EAAA,IAAI,QAAQ,MAAA,KAAW,CAAA,QAAS,IAAI,mBAAA,CAAoB,mBAAmB,CAAC,CAAA;AAC5E,EAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAS,GAAA,EAAK,IAAI,MAAA,CAAO,QAAA,CAAS,OAAO,CAAC,CAAA,CAAE,KAAA,EAAM,EAAE;AACvE;;;ACxPO,IAAM,wBAAwBA,KAAAA,CAClC,MAAA,GACA,SAAA,CAAU,CAAC,QAAQ,GAAA,KAAyB;AAC3C,EAAA,IAAI;AACF,IAAA,OAAO,eAAe,MAAM,CAAA;AAAA,EAC9B,SAAS,KAAA,EAAO;AACd,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAA,EAAG,CAAA;AAChG,IAAA,OAAOA,KAAAA,CAAE,KAAA;AAAA,EACX;AACF,CAAC;;;ACPH,IAAM,qBAAA,GAAwB,+BAAA;AAK9B,IAAM,oBAAA,GAAuB,mBAAA;AAK7B,IAAM,iBAAA,GAAoB,gBAAA;AAM1B,IAAM,qBAAA,GAAwB,wBAAA;AAG9B,IAAM,yBAAA,GAA4B,qCAAA;AAGlC,IAAM,uBAAA,GAA0B,6BAAA;AAChC,IAAM,oBAAA,GAAuB,qDAAA;AAC7B,IAAM,mBAAA,GAAsB,2BAAA;AAC5B,IAAM,qBAAA,GAAwB,iBAAA;AAC9B,IAAM,mBAAA,GAAsB,SAAA;AAErB,IAAM,iBAAA,GAAoBA,MAAE,YAAA,CAAa;AAAA,EAC9C,IAAA,EAAM,gBAAA;AAAA,EACN,QAAA,EAAUA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC/B,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAC1B,CAAC;AAQD,IAAM,uBAAuBA,KAAAA,CAC1B,MAAA,GACA,SAAA,CAAU,CAAC,QAAQ,GAAA,KAAwB;AAC1C,EAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AACrD,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,GAAA,CAAI,SAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,oEAAoE,CAAA;AAC5G,IAAA,OAAOA,KAAAA,CAAE,KAAA;AAAA,EACX;AACA,EAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,SAAA,CAAU,KAAA,CAAM,CAAC,CAAC,CAAA;AACrD,EAAA,IAAI,CAAC,MAAM,OAAA,EAAS;AAClB,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,4BAA4B,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,CAAA,EAAK,CAAA;AACjF,IAAA,OAAOA,KAAAA,CAAE,KAAA;AAAA,EACX;AACA,EAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,CAAO,IAAA,EAAK,EAAG,KAAA,EAAO,KAAA,CAAM,IAAA,EAAM,KAAA,EAAO,KAAA,CAAM,CAAC,CAAA,EAAY;AAC/E,CAAC,CAAA;AAEI,IAAM,aAAA,GAAgB,CAAC,QAAA,EAAU,QAAA,EAAU,QAAQ;AAE1D,IAAM,WAAA,GAAcA,MAAE,YAAA,CAAa;AAAA,EACjC,MAAA,EAAQA,KAAAA,CAAE,IAAA,CAAK,aAAa,CAAA;AAAA,EAC5B,QAAA,EAAU,iBAAiB,QAAA;AAC7B,CAAC,CAAA;AAEM,IAAM,YAAA,GAAeA,MACzB,YAAA,CAAa;AAAA,EACZ,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,QAAA,EAAU,sBAAsB,QAAA,EAAS;AAAA,EACzC,QAAQA,KAAAA,CAAE,MAAA,CAAO,gBAAA,EAAkB,iBAAiB,EAAE,QAAA,EAAS;AAAA,EAC/D,SAAA,EAAWA,KAAAA,CAAE,KAAA,CAAM,oBAAoB,EAAE,QAAA,EAAS;AAAA;AAAA,EAElD,QAAA,EAAUA,MAAE,KAAA,CAAM,CAACA,MAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,EAAGA,KAAAA,CAAE,MAAMA,KAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,CAAC,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKxE,SAASA,KAAAA,CAAE,MAAA,CAAO,gBAAA,EAAkB,gBAAgB,EAAE,QAAA,EAAS;AAAA,EAC/D,KAAA,EAAO,YAAY,QAAA;AACrB,CAAC,CAAA,CACA,WAAA,CAAY,CAAC,MAAA,EAAQ,GAAA,KAAQ;AAC5B,EAAA,MAAM,SAAS,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,MAAA,IAAU,EAAE,CAAA;AAC9C,EAAA,IAAI,MAAA,CAAO,YAAY,iBAAA,CAAkB,MAAA,CAAO,SAAS,GAAG,CAAA,CAAE,SAAS,CAAA,EAAG;AACxE,IAAA,GAAA,CAAI,QAAA,CAAS;AAAA,MACX,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS,kEAAA;AAAA,MACT,IAAA,EAAM,CAAC,UAAU;AAAA,KAClB,CAAA;AAAA,EACH;AACA,EAAA,KAAA,MAAW,KAAA,IAAS,cAAA,CAAe,MAAA,CAAO,QAAA,EAAU,IAAI,GAAA,CAAI,MAAM,CAAA,EAAG,MAAA,CAAO,OAAA,KAAY,MAAS,CAAA,EAAG;AAClG,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,OAAO,IAAA,EAAM,CAAC,UAAU,CAAA,EAAG,CAAA;AAAA,EACrE;AAGA,EAAA,IAAI,MAAA,CAAO,WAAW,MAAA,CAAO,IAAA,CAAK,OAAO,OAAO,CAAA,CAAE,WAAW,CAAA,EAAG;AAC9D,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,4CAA4C,IAAA,EAAM,CAAC,SAAS,CAAA,EAAG,CAAA;AAAA,EACzG;AACA,EAAA,KAAA,MAAW,CAACC,QAAO,KAAK,CAAA,IAAA,CAAM,OAAO,SAAA,IAAa,EAAC,EAAG,OAAA,EAAQ,EAAG;AAC/D,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,KAAK,CAAA,EAAG;AACjC,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,CAAA,uCAAA,EAA0C,KAAA,CAAM,KAAK,CAAA,CAAA,CAAA;AAAA,QAC9D,IAAA,EAAM,CAAC,WAAA,EAAaA,MAAK;AAAA,OAC1B,CAAA;AAAA,IACH;AAAA,EACF;AACF,CAAC;AAII,SAAS,mBAAmBC,IAAAA,EAAuB;AACxD,EAAA,MAAM,cAAA,GAAiBA,IAAAA,CAAI,OAAA,CAAQ,qBAAA,EAAuB,IAAI,CAAA;AAC9D,EAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,cAAA,CAAe,QAAA,CAAS,mBAAmB,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,CAAC,CAAW,CAAA;AACjG,EAAA,OAAO,CAAC,GAAG,IAAI,GAAA,CAAI,KAAK,CAAC,CAAA;AAC3B;AAGO,SAAS,uBAAuB,QAAA,EAAgD;AACrF,EAAA,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,GAAI,QAAA,GAAW,CAAC,QAAQ,CAAA,EAAG,GAAA,CAAI,CAAC,SAAA,KAAc,SAAA,CAAU,MAAM,CAAA;AAC9F;AAMA,IAAM,qBAAA,GAA+C;AAAA,EACnD,qEAAA;AAAA,EACA,0EAAA;AAAA,EACA;AACF,CAAA;AAUO,SAAS,mBAAmB,MAAA,EAAoC;AACrE,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,KAAA,MAAW,SAAA,IAAa,sBAAA,CAAuB,MAAA,CAAO,QAAQ,CAAA,EAAG;AAC/D,IAAA,MAAM,MAAA,GAAS,SAAA,CAAU,OAAA,CAAQ,qBAAA,EAAuB,IAAI,CAAA;AAC5D,IAAA,KAAA,MAAW,WAAW,qBAAA,EAAuB;AAC3C,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA;AACjC,MAAA,IAAI,CAAC,KAAA,EAAO;AACZ,MAAA,MAAM,KAAA,GAAS,KAAA,CAAM,CAAC,CAAA,CAAa,WAAA,EAAY;AAC/C,MAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,EAAG;AACpB,QAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AACd,QAAA,OAAA,CAAQ,KAAK,KAAK,CAAA;AAAA,MACpB;AACA,MAAA;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,cAAA,CACP,QAAA,EACA,cAAA,EACA,UAAA,EACU;AACV,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,MAAM,UAAA,GAAa,uBAAuB,QAAQ,CAAA;AAClD,EAAA,UAAA,CAAW,OAAA,CAAQ,CAAC,SAAA,EAAWD,MAAAA,KAAU;AAEvC,IAAA,MAAM,cAAA,GAAiB,SAAA,CAAU,OAAA,CAAQ,qBAAA,EAAuB,IAAI,CAAA;AACpE,IAAA,MAAM,KAAK,UAAA,CAAW,MAAA,GAAS,IAAI,CAAA,YAAA,EAAeA,MAAAA,GAAQ,CAAC,CAAA,CAAA,CAAA,GAAM,EAAA;AACjE,IAAA,IAAI,CAAC,sBAAsB,IAAA,CAAK,SAAS,GAAG,MAAA,CAAO,IAAA,CAAK,CAAA,0CAAA,EAA6C,EAAE,CAAA,CAAE,CAAA;AACzG,IAAA,IAAI,cAAA,CAAe,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,CAAA,8CAAA,EAAiD,EAAE,CAAA,CAAE,CAAA;AACxH,IAAA,IAAI,mBAAA,CAAoB,KAAK,cAAc,CAAA,SAAU,IAAA,CAAK,CAAA,sCAAA,EAAyC,EAAE,CAAA,CAAE,CAAA;AACvG,IAAA,IAAI,oBAAA,CAAqB,KAAK,cAAc,CAAA,SAAU,IAAA,CAAK,CAAA,2CAAA,EAA8C,EAAE,CAAA,CAAE,CAAA;AAC7G,IAAA,IAAI,qBAAA,CAAsB,KAAK,cAAc,CAAA,SAAU,IAAA,CAAK,CAAA,gDAAA,EAA8C,EAAE,CAAA,CAAE,CAAA;AAE9G,IAAA,IAAI,cAAA,CAAe,SAAS,GAAG,CAAA,SAAU,IAAA,CAAK,CAAA,+CAAA,EAAkD,EAAE,CAAA,CAAE,CAAA;AACpG,IAAA,IAAI,wBAAwB,IAAA,CAAK,cAAA,CAAe,QAAQ,yBAAA,EAA2B,EAAE,CAAC,CAAA,EAAG;AACvF,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,+EAAA,EAA6E,EAAE,CAAA,CAAE,CAAA;AAAA,IAC/F;AAGA,IAAA,IAAI,iBAAA,CAAkB,KAAK,cAAc,CAAA,IAAK,EAAE,UAAA,IAAcA,MAAAA,KAAU,UAAA,CAAW,MAAA,GAAS,CAAA,CAAA,EAAI;AAC9F,MAAA,MAAA,CAAO,IAAA;AAAA,QACL,UAAA,GACI,CAAA,kDAAA,EAAqD,EAAE,CAAA,CAAA,GACvD,qEAAqE,EAAE,CAAA;AAAA,OAC7E;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AACD,EAAA,MAAM,IAAA,GAAO,UAAA,CAAW,EAAA,CAAG,EAAE,CAAA;AAC7B,EAAA,IAAI,UAAA,IAAc,IAAA,IAAQ,CAAC,iBAAA,CAAkB,IAAA,CAAK,KAAK,OAAA,CAAQ,qBAAA,EAAuB,IAAI,CAAC,CAAA,EAAG;AAC5F,IAAA,MAAA,CAAO,KAAK,yFAAyF,CAAA;AAAA,EACvG;AACA,EAAA,MAAM,UAAA,GAAa,kBAAA,CAAmB,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,IAAA,KAAS,CAAC,cAAA,CAAe,GAAA,CAAI,IAAI,CAAC,CAAA;AACvG,EAAA,IAAI,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,0CAA0C,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AACxG,EAAA,OAAO,MAAA;AACT;;;ACrMA,IAAM,cAAA,GAAgE;AAAA,EACpE,MAAA,EAAQ,kBAAA;AAAA,EACR,WAAA,EAAa;AACf,CAAA;AAEO,IAAM,WAAA,GAAc,CAAC,IAAA,KAA6B,cAAA,CAAe,IAAI,CAAA,IAAK;;;ACP1E,IAAM,cAAA,GAAiB;AAGvB,IAAM,sBAAA,GAAyB;AAE/B,IAAM,eAAA,GAAkB,CAAC,IAAA,KAAyB,CAAA,CAAA,EAAI,KAAK,UAAA,CAAW,GAAA,EAAK,IAAI,CAAC,CAAA,CAAA;AAEhF,IAAM,YAAA,GAAe,CAAC,KAAA,KAA0B,CAAA,CAAA,EAAI,MAAM,UAAA,CAAW,GAAA,EAAK,IAAI,CAAC,CAAA,CAAA;AAGtF,IAAM,aAAA,GAAgB,2BAA2B,cAAc,CAAA,oBAAA,CAAA;AAExD,IAAM,eAAA,GAAkB,CAAC,GAAA,KAAwB,CAAA,CAAA,EAAI,aAAa,CAAA,KAAA,EAAQ,YAAA,CAAa,GAAG,CAAC,CAAA,CAAA;AAG3F,IAAM,oBAAA,GAAuB,CAAC,GAAA,KACnC,CAAA,SAAA,EAAY,aAAa,QAAQ,sBAAsB,CAAA,IAAA,EAAO,YAAA,CAAa,GAAG,CAAC,CAAA,QAAA;;;ACZjF,IAAM,eAAA,GAAuD;AAAA,EAC3D,GAAA,EAAK,GAAA;AAAA,EACL,IAAA,EAAM,IAAA;AAAA,EACN,GAAA,EAAK,GAAA;AAAA,EACL,IAAA,EAAM,IAAA;AAAA,EACN,GAAA,EAAK,GAAA;AAAA,EACL,IAAA,EAAM;AACR,CAAA;AAKA,SAAS,cAAA,CAAe,OAAA,EAAkB,KAAA,EAAgB,WAAA,EAA4C;AACpG,EAAA,IAAI,QAAQ,IAAA,KAAS,QAAA,EAAU,OAAO,eAAA,CAAgB,QAAQ,IAAI,CAAA;AAClE,EAAA,IAAI,OAAA,CAAQ,SAAS,OAAA,EAAS;AAC5B,IAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,OAAA,CAAQ,GAAG,CAAA;AAI9C,IAAA,MAAM,aAAa,KAAA,CAAM,IAAA,KAAS,WAAW,WAAA,GAAc,KAAA,CAAM,IAAI,CAAA,GAAI,MAAA;AACzE,IAAA,OAAO,UAAA,IAAc,eAAe,MAAA,GAAS,CAAA,CAAA,EAAI,UAAU,CAAA,GAAA,EAAM,WAAA,CAAY,UAAU,CAAC,CAAA,CAAA,GAAK,UAAA;AAAA,EAC/F;AACA,EAAA,MAAM,EAAE,OAAM,GAAI,OAAA;AAClB,EAAA,IAAI,KAAA,KAAU,MAAM,OAAO,MAAA;AAC3B,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,aAAa,KAAK,CAAA;AACxD,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAEA,SAAS,iBAAA,CAAkB,EAAA,EAAe,IAAA,EAAe,KAAA,EAAgB,WAAA,EAA4C;AACnH,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,KAAS,SAAA,IAAa,KAAK,KAAA,KAAU,IAAA,GAAO,KAAA,GAAQ,KAAA,CAAM,IAAA,KAAS,SAAA,IAAa,KAAA,CAAM,KAAA,KAAU,OAAO,IAAA,GAAO,IAAA;AACpI,EAAA,IAAI,QAAA,KAAa,EAAA,KAAO,GAAA,IAAO,EAAA,KAAO,IAAA,CAAA,EAAO;AAC3C,IAAA,OAAO,CAAA,EAAG,cAAA,CAAe,QAAA,EAAU,QAAA,EAAU,WAAW,CAAC,CAAA,GAAA,EAAM,EAAA,KAAO,IAAA,GAAO,MAAA,GAAS,EAAE,CAAA,KAAA,CAAA;AAAA,EAC1F;AACA,EAAA,OAAO,CAAA,EAAG,cAAA,CAAe,IAAA,EAAM,KAAA,EAAO,WAAW,CAAC,CAAA,CAAA,EAAI,eAAA,CAAgB,EAAE,CAAC,CAAA,CAAA,EAAI,cAAA,CAAe,KAAA,EAAO,IAAA,EAAM,WAAW,CAAC,CAAA,CAAA;AACvH;AAGO,SAAS,gBAAA,CAAiB,WAAsB,WAAA,EAA4C;AACjG,EAAA,QAAQ,UAAU,IAAA;AAAM,IACtB,KAAK,KAAA;AAAA,IACL,KAAK,IAAA,EAAM;AACT,MAAA,MAAM,SAAS,SAAA,CAAU,QAAA,CAAS,GAAA,CAAI,CAAC,YAAY,gBAAA,CAAiB,OAAA,EAAS,WAAW,CAAC,EAAE,IAAA,CAAK,CAAA,CAAA,EAAI,UAAU,IAAA,CAAK,WAAA,EAAa,CAAA,CAAA,CAAG,CAAA;AACnI,MAAA,OAAO,IAAI,MAAM,CAAA,CAAA,CAAA;AAAA,IACnB;AAAA,IACA,KAAK,KAAA;AACH,MAAA,OAAO,CAAA,KAAA,EAAQ,gBAAA,CAAiB,SAAA,CAAU,OAAA,EAAS,WAAW,CAAC,CAAA,CAAA,CAAA;AAAA,IACjE,KAAK,SAAA;AACH,MAAA,OAAO,CAAA,CAAA,EAAI,kBAAkB,SAAA,CAAU,EAAA,EAAI,UAAU,IAAA,EAAM,SAAA,CAAU,KAAA,EAAO,WAAW,CAAC,CAAA,CAAA,CAAA;AAAA,IAC1F,KAAK,YAAA;AACH,MAAA,OAAO,CAAA,CAAA,EAAI,oBAAA,CAAqB,SAAA,CAAU,GAAG,CAAC,CAAA,CAAA,CAAA;AAAA;AAEpD;;;ACvCA,IAAME,sBAAAA,GAAwB,iBAAA;AAM9B,IAAM,aAAA,GACJ,mHAAA;AACF,IAAM,iBAAA,GAAoB,6BAAA;AAS1B,IAAM,aAAA,GAAyD;AAAA,EAC7D,IAAA,EAAMH,MAAE,MAAA,EAAO;AAAA,EACf,IAAA,EAAMA,MAAE,MAAA,EAAO;AAAA,EACf,OAAA,EAASA,KAAAA,CAAE,KAAA,CAAM,CAACA,KAAAA,CAAE,QAAO,EAAGA,KAAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AAAA,EACzC,MAAA,EAAQA,KAAAA,CAAE,KAAA,CAAM,CAACA,KAAAA,CAAE,QAAO,EAAGA,KAAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AAAA,EACxC,OAAA,EAASA,KAAAA,CAAE,KAAA,CAAM,CAACA,KAAAA,CAAE,QAAO,EAAGA,KAAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AAAA,EACzC,MAAA,EAAQA,KAAAA,CAAE,KAAA,CAAM,CAACA,KAAAA,CAAE,QAAO,EAAGA,KAAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AAAA,EACxC,OAAA,EAASA,KAAAA,CAAE,KAAA,CAAM,CAACA,KAAAA,CAAE,SAAQ,EAAGA,KAAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AAAA,EAC1C,WAAA,EAAaA,MAAE,MAAA,EAAO;AAAA,EACtB,IAAA,EAAMA,MAAE,MAAA,EAAO;AAAA,EACf,KAAA,EAAOA,MAAE,OAAA;AACX,CAAA;AAEO,SAAS,wBAAwB,MAAA,EAA8D;AACpG,EAAA,MAAM,QAAmC,EAAC;AAC1C,EAAA,MAAM,UAAU,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,MAAA,IAAU,EAAE,CAAA;AAClD,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,OAAA,EAAS;AAGnC,IAAA,KAAA,CAAM,IAAI,CAAA,GAAI,KAAA,CAAM,QAAA,GAAW,aAAA,CAAc,KAAA,CAAM,IAAI,CAAA,CAAE,OAAA,EAAQ,GAAI,aAAA,CAAc,KAAA,CAAM,IAAI,CAAA;AAAA,EAC/F;AACA,EAAA,OAAOA,MAAE,YAAA,CAAa,KAAK,EAAE,WAAA,CAAY,CAAC,KAAK,GAAA,KAAQ;AAIrD,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,OAAA,EAAS;AACnC,MAAA,IAAI,CAAC,MAAM,QAAA,IAAY,KAAA,CAAM,SAAS,OAAA,IAAY,GAAA,CAAgC,IAAI,CAAA,KAAM,MAAA,EAAW;AACrG,QAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,YAAY,IAAA,EAAM,CAAC,IAAI,CAAA,EAAG,CAAA;AAAA,MACpE;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AACH;AAGO,IAAM,gBAAA,GAAmB,CAAC,MAAA,KAAuC,MAAA,CAAO,KAAK,MAAA,CAAO,MAAA,IAAU,EAAE;AAGhG,IAAM,cAAA,GAAiB,CAAC,IAAA,KAAyB,CAAA,EAAA,EAAK,IAAI,CAAA;AAU1D,SAAS,uBAAA,CACd,MAAA,EACA,WAAA,GAAwC,cAAA,EAC9B;AACV,EAAA,OAAO,sBAAA,CAAuB,MAAA,CAAO,QAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,SAAA,KAAc,gBAAA,CAAiB,SAAA,EAAW,WAAW,CAAC,CAAA;AAC5G;AAEA,SAAS,gBAAA,CAAiBE,MAAa,WAAA,EAA+C;AACpF,EAAA,MAAM,QAAA,GAAWA,KAAI,OAAA,CAAQ,aAAA,EAAe,CAAC,KAAA,EAAO,QAAA,EAAmB,eAAwB,SAAA,KAAuB;AACpH,IAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,MAAA,IAAI,CAAC,iBAAA,CAAkB,IAAA,CAAK,QAAQ,CAAA,QAAS,IAAI,kBAAA,CAAmB,CAAA,+BAAA,EAAkC,KAAK,CAAA,CAAE,CAAA;AAC7G,MAAA,OAAO,gBAAgB,QAAQ,CAAA;AAAA,IACjC;AACA,IAAA,IAAI,kBAAkB,MAAA,EAAW;AAC/B,MAAA,IAAI,CAAC,sBAAA,CAAuB,IAAA,CAAK,aAAa,CAAA,EAAG;AAC/C,QAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,oCAAA,EAAuC,KAAK,CAAA,CAAE,CAAA;AAAA,MAC7E;AACA,MAAA,OAAO,qBAAqB,aAAa,CAAA;AAAA,IAC3C;AACA,IAAA,IAAI,SAAA,KAAc,MAAA,EAAW,OAAO,WAAA,CAAY,SAAS,CAAA;AACzD,IAAA,OAAO,KAAA;AAAA,EACT,CAAC,CAAA;AAID,EAAA,IAAI,kBAAkB,IAAA,CAAK,QAAA,CAAS,QAAQC,sBAAAA,EAAuB,IAAI,CAAC,CAAA,EAAG;AACzE,IAAA,MAAM,IAAI,mBAAmB,mEAAmE,CAAA;AAAA,EAClG;AACA,EAAA,OAAO,QAAA;AACT;AAGO,SAAS,sBAAsB,MAAA,EAAyC;AAC7E,EAAA,OAAO,OAAO,QAAA,GAAW,gBAAA,CAAiB,MAAA,CAAO,QAAA,CAAS,GAAG,CAAA,GAAI,IAAA;AACnE;AAGO,SAAS,8BAA8B,MAAA,EAAoC;AAChF,EAAA,MAAM,OAAiB,EAAC;AACxB,EAAA,KAAA,MAAW,SAAA,IAAa,sBAAA,CAAuB,MAAA,CAAO,QAAQ,CAAA,EAAG;AAC/D,IAAA,KAAA,MAAW,KAAA,IAAS,SAAA,CAAU,QAAA,CAAS,aAAa,CAAA,EAAG;AACrD,MAAA,IAAI,KAAA,CAAM,CAAC,CAAA,KAAM,MAAA,OAAgB,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,IAChD;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;;;AC3GO,IAAM,+BAAA,GAAkC;AACxC,IAAM,gCAAA,GAAmC;AAGzC,IAAM,kBAAA,GAAqB,CAAC,UAAA,KAA+B,CAAA,OAAA,EAAU,UAAU,CAAA;AAWtF,SAAS,gBAAA,CAAiB,SAAmD,aAAA,EAA+B;AAC1G,EAAA,MAAM,UAAA,GAAa,OAAO,IAAA,CAAK,OAAO,EAAE,GAAA,CAAI,eAAe,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AACtE,EAAA,OAAO,CAAA,uBAAA,EAA0B,aAAa,CAAA,SAAA,EAAY,UAAU,CAAA,mBAAA,CAAA;AACtE;AAOA,IAAM,aAAa,CAAC,UAAA,KAClB,UAAA,CAAW,MAAA,CACR,QAAQ,CAAC,KAAA,KAAU,MAAA,CAAO,OAAA,CAAQ,MAAM,OAAA,IAAW,EAAE,CAAA,CAAE,IAAI,CAAC,CAAC,IAAA,EAAM,MAAM,OAAO,EAAE,IAAA,EAAM,MAAA,EAAO,CAAE,CAAC,CAAA,CAClG,IAAA,CAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,IAAA,CAAK,aAAA,CAAc,CAAA,CAAE,IAAI,CAAC,CAAA;AAezC,SAAS,yBAAyB,UAAA,EAA2C;AAClF,EAAA,MAAM,MAAA,GAAS,aAAA,CAAc,UAAA,CAAW,SAAS,CAAA;AACjD,EAAA,OAAO,CAAC,sBAAA,CAAuB,MAAM,GAAG,GAAG,UAAA,CAAW,UAAU,CAAA,CAAE,OAAA,CAAQ,CAAC,EAAE,IAAA,EAAM,QAAO,KAAM,oBAAA,CAAqB,YAAY,IAAA,EAAM,MAAM,CAAC,CAAC,CAAA;AACjJ;AAUO,SAAS,oBAAoB,UAAA,EAA2C;AAC7E,EAAA,MAAM,OAAA,GAAU,WAAW,UAAU,CAAA;AACrC,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAClC,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,yBAAA,EAA4B,eAAA,CAAgB,cAAc,UAAA,CAAW,SAAS,CAAC,CAAC,CAAA,CAAE,CAAA;AACtG,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,MAAA,EAAO,IAAK,OAAA,EAAS;AACtC,IAAA,MAAM,KAAA,GAAQ,iBAAiB,MAAM,CAAA;AACrC,IAAA,MAAM,SAAA,GAAY,MAAM,MAAA,GAAS,CAAA,GAAI,KAAK,KAAA,CAAM,GAAA,CAAI,CAAC,KAAA,KAAU,WAAA,CAAY,OAAO,MAAA,CAAQ,KAAK,EAAG,IAAI,CAAC,EAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA,GAAM,EAAA;AACzH,IAAA,MAAM,QAAA,GAAW,uBAAA,CAAwB,MAAA,EAAQ,CAAC,KAAA,KAAU,CAAA,CAAA,EAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,CAAC,CAAA,CAAE,CAAA;AAC1F,IAAA,QAAA,CAAS,OAAA,CAAQ,CAACD,IAAAA,EAAKD,MAAAA,KAAU;AAI/B,MAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,IAAWA,MAAAA,KAAU,QAAA,CAAS,MAAA,GAAS,CAAA,GAAI,gBAAA,CAAiB,MAAA,CAAO,OAAA,EAASC,IAAG,CAAA,GAAIA,IAAAA;AAC1G,MAAA,UAAA,CAAW,IAAA,CAAK,CAAA,QAAA,EAAW,eAAA,CAAgB,CAAA,UAAA,EAAa,IAAI,CAAA,CAAA,EAAID,MAAK,CAAA,CAAE,CAAC,CAAA,EAAG,SAAS,CAAA,IAAA,EAAO,OAAO,CAAA,CAAE,CAAA;AAAA,IACtG,CAAC,CAAA;AAAA,EACH;AACA,EAAA,OAAO,UAAA;AACT;AAOA,SAAS,uBAAuB,MAAA,EAAwB;AACtD,EAAA,OAAO,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAA,EAQe,YAAA,CAAa,MAAM,CAAC,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAA,CAAA;AAM5C;AAEA,SAAS,oBAAA,CAAqB,UAAA,EAAiC,IAAA,EAAc,MAAA,EAAoC;AAC/G,EAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,aAAA,CAAc,UAAA,CAAW,SAAS,CAAC,CAAA;AAClE,EAAA,MAAM,EAAA,GAAK,GAAG,MAAM,CAAA,CAAA,EAAI,gBAAgB,kBAAA,CAAmB,IAAI,CAAC,CAAC,CAAA,CAAA;AACjE,EAAA,MAAM,KAAA,GAAQ,iBAAiB,MAAM,CAAA;AACrC,EAAA,MAAM,SAAA,GAAY,MACf,GAAA,CAAI,CAAC,cAAc,CAAA,EAAG,eAAA,CAAgB,cAAA,CAAe,SAAS,CAAC,CAAC,IAAI,WAAA,CAAY,MAAA,CAAO,OAAQ,SAAS,CAAA,CAAG,IAAI,CAAC,CAAA,CAAE,CAAA,CAClH,IAAA,CAAK,IAAI,CAAA;AACZ,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,GAAA,CAAI,CAAC,cAAc,WAAA,CAAY,MAAA,CAAO,MAAA,CAAQ,SAAS,CAAA,CAAG,IAAI,CAAC,CAAA,CAAE,KAAK,IAAI,CAAA;AACjG,EAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,gBAAA,CAAiB,UAAA,CAAW,SAAS,CAAC,CAAA;AAInE,EAAA,MAAM,UAAA,GAAa,wBAAwB,MAAM,CAAA;AACjD,EAAA,MAAM,IAAA,GAAO,UAAA,CAAW,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA;AAC7C,EAAA,MAAM,OAAA,GAAU,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,SAAA,KAAc,CAAA,EAAA,EAAK,SAAS,CAAA,CAAA,CAAG,CAAA;AAC5E,EAAA,MAAM,SAAS,MAAA,CAAO,OAAA;AAAA;AAAA,IAElB,CAAA,gBAAA,EAAmB,EAAE,CAAA,CAAA,EAAI,SAAS,CAAA;AAAA,cAAA,EACxB,MAAA,CAAO,QAAQ,MAAA,CAAO,OAAO,EACpC,GAAA,CAAI,CAAC,CAAC,MAAA,EAAQ,IAAI,CAAA,KAAM,GAAG,eAAA,CAAgB,MAAM,CAAC,CAAA,CAAA,EAAI,WAAA,CAAY,IAAI,CAAC,CAAA,CAAE,CAAA,CACzE,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA;AAAA;AAAA,kBAAA,EAGC,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMxB,CAAC,eAAe,UAAA,EAAY,IAAA,EAAM,MAAM,CAAA,EAAG,GAAG,SAAS,CAAA,eAAA,EAAkB,gBAAA,CAAiB,OAAO,OAAA,EAAS,IAAI,CAAC,CAAA,CAAA,CAAG,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC;AAAA;AAAA,YAAA;AAAA;AAAA;AAAA,IAI1I,CAAA,gBAAA,EAAmB,EAAE,CAAA,CAAA,EAAI,SAAS,CAAA;AAAA;AAAA;AAAA;AAAA,kBAAA,EAIpB,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,EAKxB,CAAC,cAAA,CAAe,UAAA,EAAY,IAAA,EAAM,MAAM,GAAG,GAAG,OAAA,EAAS,CAAA,EAAA,EAAK,IAAI,GAAG,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,YAAA;AAAA,GAAA;AAS/F,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,CAAA,uBAAA,EAA0B,EAAE,CAAA,CAAA,EAAI,QAAQ,CAAA,aAAA,CAAA;AAAA,IACxC,CAAA,0BAAA,EAA6B,EAAE,CAAA,CAAA,EAAI,QAAQ,QAAQ,IAAI,CAAA;AAAA,GACzD;AACF;AAGA,SAAS,cAAA,CAAe,UAAA,EAAiC,IAAA,EAAc,MAAA,EAAkC;AACvG,EAAA,MAAM,QAAkB,EAAC;AAEzB,EAAA,MAAM,QAAA,GAAW,sBAAsB,MAAM,CAAA;AAC7C,EAAA,IAAI,QAAA,EAAU;AAGZ,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,aAAa,QAAQ,CAAA,MAAA,CAAA;AAAA,MACrB,CAAA,4BAAA,EAA+B,IAAI,CAAA,4DAAA,EAA+D,YAAA,CAAa,+BAA+B,CAAC,CAAA,CAAA,CAAA;AAAA,MAC/I,CAAA,SAAA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,SAAA,IAAa,EAAC,EAAG;AAC1C,IAAA,MAAM,EAAE,MAAA,EAAQ,KAAA,EAAO,KAAI,GAAI,sBAAA,CAAuB,YAAY,KAAK,CAAA;AACvE,IAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,cAAA,CAAe,KAAA,CAAM,KAAK,CAAC,CAAA;AAIvD,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,CAAA,KAAA,EAAQ,GAAG,CAAA,2CAAA,EAA8C,eAAA,CAAgB,MAAM,CAAC,CAAA,CAAA,EAAI,eAAA,CAAgB,KAAK,CAAC,CAAA,OAAA,EAAU,eAAA,CAAgB,GAAG,CAAC,MAAM,GAAG,CAAA,gBAAA,CAAA;AAAA,MACjJ,CAAA,0CAAA,EAA6C,MAAM,KAAK,CAAA,SAAA,EAAY,MAAM,KAAK,CAAA,kBAAA,EAAqB,YAAA,CAAa,gCAAgC,CAAC,CAAA,CAAA,CAAA;AAAA,MAClJ,CAAA,SAAA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAEA,SAAS,sBAAA,CACP,YACA,KAAA,EACgD;AAChD,EAAA,IAAI,KAAA,CAAM,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,EAAG;AAC7B,IAAA,MAAM,CAAC,MAAA,EAAQ,KAAK,IAAI,KAAA,CAAM,KAAA,CAAM,MAAM,GAAG,CAAA;AAC7C,IAAA,OAAO,EAAE,MAAA,EAAQ,KAAA,EAAO,GAAA,EAAK,IAAA,EAAK;AAAA,EACpC;AACA,EAAA,MAAM,MAAA,GAAS,WAAW,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,KAAA,KAAU,KAAA,CAAM,KAAK,CAAA;AAC5E,EAAA,MAAM,MAAM,MAAA,IAAU,MAAA,CAAO,QAAQ,MAAA,CAAO,OAAA,IAAW,EAAE,CAAA,CAAE,IAAA,CAAK,CAAC,GAAG,MAAM,MAAM,MAAA,CAAO,WAAW,IAAI,CAAC,CAAA;AACvG,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,GAAA,EAAK;AAGnB,IAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,yBAAA,EAA4B,KAAA,CAAM,KAAK,CAAA,yCAAA,CAA2C,CAAA;AAAA,EACjH;AACA,EAAA,OAAO,EAAE,QAAQ,aAAA,CAAc,UAAA,CAAW,SAAS,CAAA,EAAG,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,GAAA,EAAI;AAChF;AChNA,IAAM,UAAA,GAAaD,MAAE,YAAA,CAAa;AAAA,EAChC,EAAA,EAAI,oBAAA;AAAA,EACJ,EAAA,EAAI,gBAAA;AAAA,EACJ,OAAA,EAASA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC9B,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAC1B,CAAC,CAAA;AAID,IAAM,WAAA,GAAcA,MACjB,KAAA,CAAM;AAAA,EACLA,KAAAA,CAAE,KAAA,CAAM,gBAAgB,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,EAC/BA,MAAE,YAAA,CAAa;AAAA,IACb,SAASA,KAAAA,CAAE,KAAA,CAAM,gBAAgB,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,IACxC,MAAA,EAAQA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,IAC7B,IAAA,EAAM,iBAAiB,QAAA;AAAS,GACjC;AACH,CAAC,CAAA,CACA,SAAA,CAAU,CAACC,MAAAA,KAAW,KAAA,CAAM,OAAA,CAAQA,MAAK,CAAA,GAAI,EAAE,OAAA,EAASA,MAAAA,EAAM,GAAIA,MAAM,CAAA;AAE3E,IAAM,cAAA,GAAiBD,MAAE,YAAA,CAAa;AAAA,EACpC,IAAA,EAAM,sBAAsB,QAAA,EAAS;AAAA,EACrC,KAAA,EAAO,sBAAsB,QAAA;AAC/B,CAAC,CAAA;AAEM,IAAM,eAAA,GAAkBA,MAC5B,YAAA,CAAa;AAAA,EACZ,SAAA,EAAW,eAAA;AAAA,EACX,KAAA,EAAO,gBAAA;AAAA,EACP,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,SAASA,KAAAA,CAAE,MAAA,CAAO,gBAAA,EAAkB,YAAY,EAAE,QAAA,EAAS;AAAA,EAC3D,MAAA,EAAQA,MAAE,MAAA,EAAO,CAAE,MAAM,qBAAA,EAAuB,0CAA0C,EAAE,QAAA,EAAS;AAAA,EACrG,OAAOA,KAAAA,CAAE,MAAA,CAAO,gBAAA,EAAkB,UAAU,EAAE,QAAA,EAAS;AAAA,EACvD,OAAA,EAASA,KAAAA,CAAE,KAAA,CAAM,WAAW,EAAE,QAAA,EAAS;AAAA,EACvC,QAAA,EAAU,eAAe,QAAA,EAAS;AAAA,EAClC,SAASA,KAAAA,CAAE,MAAA,CAAO,gBAAA,EAAkB,YAAY,EAAE,QAAA;AACpD,CAAC,CAAA,CACA,WAAA,CAAY,CAAC,KAAA,EAAO,GAAA,KAAQ;AAC3B,EAAA,IAAI,oBAAA,CAAqB,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA,EAAG;AACzC,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,CAAA,CAAA,EAAI,KAAA,CAAM,KAAK,CAAA,0BAAA,CAAA,EAA8B,IAAA,EAAM,CAAC,OAAO,GAAG,CAAA;AAAA,EACxG;AACA,EAAA,KAAA,MAAW,QAAQ,MAAA,CAAO,IAAA,CAAK,MAAM,OAAA,IAAW,EAAE,CAAA,EAAG;AACnD,IAAA,IAAI,qBAAA,CAAsB,GAAA,CAAI,IAAI,CAAA,EAAG;AACnC,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,WAAW,IAAI,CAAA,yHAAA,CAAA;AAAA,QACxB,IAAA,EAAM,CAAC,SAAA,EAAW,IAAI;AAAA,OACvB,CAAA;AAAA,IACH;AAAA,EACF;AACA,EAAA,IAAI,KAAA,CAAM,MAAA,EAAQ,mBAAA,CAAoB,KAAA,EAAO,GAAG,CAAA;AAAA,OAC3C,mBAAA,CAAoB,OAAO,GAAG,CAAA;AACnC,EAAA,aAAA,CAAc,OAAO,GAAG,CAAA;AACxB,EAAA,qBAAA,CAAsB,OAAO,GAAG,CAAA;AAChC,EAAA,0BAAA,CAA2B,OAAO,GAAG,CAAA;AACvC,CAAC;AAOI,IAAM,SAAA,GAAY,CAAC,KAAA,EAAe,UAAA,KACvC,UAAA,CAAW,IAAA,IAAQ,CAAA,GAAA,EAAM,KAAK,CAAA,CAAA,EAAI,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAGzD,IAAM,aAAa,CAAC,KAAA,EAAe,WAA2B,CAAA,EAAG,KAAK,IAAI,MAAM,CAAA,CAAA;AAGhF,IAAM,iBAAiB,CAAC,KAAA,EAAe,SAAyB,CAAA,GAAA,EAAM,KAAK,IAAI,IAAI,CAAA,CAAA;AAI1F,SAAS,mBAAA,CAAoB,OAAkB,GAAA,EAAsB;AACnE,EAAA,MAAM,SAAA,GAA8C;AAAA,IAClD,CAAC,WAAW,8DAA8D,CAAA;AAAA,IAC1E,CAAC,WAAW,sDAAsD,CAAA;AAAA,IAClE,CAAC,WAAW,yDAAyD;AAAA,GACvE;AACA,EAAA,KAAA,MAAW,CAAC,KAAA,EAAO,OAAO,CAAA,IAAK,SAAA,EAAW;AACxC,IAAA,IAAI,KAAA,CAAM,KAAK,CAAA,KAAM,MAAA,MAAe,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,IAAA,EAAM,CAAC,KAAK,GAAG,CAAA;AAAA,EACzF;AACA,EAAA,IAAI,KAAA,CAAM,UAAU,KAAA,EAAO;AACzB,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,6BAAA,EAA+B,IAAA,EAAM,CAAC,UAAA,EAAY,OAAO,CAAA,EAAG,CAAA;AAAA,EACtG;AACF;AAEA,SAAS,eAAA,CACP,OAAA,EACA,KAAA,EACA,GAAA,EACM;AACN,EAAA,MAAM,aAAA,uBAAoB,GAAA,EAAoB;AAC9C,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,IAAI,CAAA,EAAG,YAAA;AACnC,IAAA,IAAI,CAAC,WAAA,EAAa;AAClB,IAAA,IAAI,WAAA,KAAgB,IAAA,IAAQ,KAAA,CAAM,QAAA,CAAS,WAAW,CAAA,EAAG;AACvD,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,uDAAA;AAAA,QACT,IAAA,EAAM,CAAC,SAAA,EAAW,IAAA,EAAM,cAAc;AAAA,OACvC,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,OAAA,GAAU,aAAA,CAAc,GAAA,CAAI,WAAW,CAAA;AAC7C,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,CAAA,cAAA,EAAiB,WAAW,CAAA,yBAAA,EAA4B,OAAO,CAAA,CAAA,CAAA;AAAA,QACxE,IAAA,EAAM,CAAC,SAAA,EAAW,IAAA,EAAM,cAAc;AAAA,OACvC,CAAA;AAAA,IACH;AACA,IAAA,aAAA,CAAc,GAAA,CAAI,aAAa,IAAI,CAAA;AAAA,EACrC;AACF;AAEA,SAAS,mBAAA,CAAoB,OAAkB,GAAA,EAAsB;AACnE,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,IAAW,EAAC;AAClC,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AACjC,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,4CAA4C,IAAA,EAAM,CAAC,SAAS,CAAA,EAAG,CAAA;AACvG,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,WAAA,GAAc,MAAM,MAAA,CAAO,CAAC,SAAS,OAAA,CAAQ,IAAI,GAAG,WAAW,CAAA;AACrE,EAAA,IAAI,WAAA,CAAY,WAAW,CAAA,EAAG;AAC5B,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,0CAA0C,IAAA,EAAM,CAAC,SAAS,CAAA,EAAG,CAAA;AAAA,EACvG;AAEA,EAAA,eAAA,CAAgB,OAAA,EAAS,OAAO,GAAG,CAAA;AACnC,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,MAAA,GAAS,QAAQ,IAAI,CAAA;AAC3B,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,MAAM,OAAO,MAAA,CAAO,IAAA,GAAO,SAAA,CAAU,MAAA,CAAO,IAAI,CAAA,GAAI,IAAA;AACpD,IAAA,IAAI,MAAA,CAAO,IAAA,IAAQ,IAAA,EAAM,MAAA,KAAW,IAAA,EAAM;AACxC,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,kDAAA;AAAA,QACT,IAAA,EAAM,CAAC,SAAA,EAAW,IAAA,EAAM,MAAM;AAAA,OAC/B,CAAA;AAAA,IACH;AACA,IAAA,IAAI,IAAA,IAAQ,IAAA,CAAK,IAAA,KAAS,MAAA,CAAO,IAAA,EAAM;AACrC,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,SAAS,CAAA,aAAA,EAAgB,IAAA,CAAK,IAAI,CAAA,gCAAA,EAAmC,OAAO,IAAI,CAAA,CAAA,CAAA;AAAA,QAChF,IAAA,EAAM,CAAC,SAAA,EAAW,IAAA,EAAM,MAAM;AAAA,OAC/B,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,CAAC,UAAUC,MAAK,CAAA,IAAA,CAAM,MAAM,OAAA,IAAW,EAAC,EAAG,OAAA,EAAQ,EAAG;AAC/D,IAAA,IAAI,IAAI,IAAIA,MAAAA,CAAM,OAAO,EAAE,IAAA,KAASA,MAAAA,CAAM,QAAQ,MAAA,EAAQ;AACxD,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,qCAAA;AAAA,QACT,IAAA,EAAM,CAAC,SAAA,EAAW,QAAQ;AAAA,OAC3B,CAAA;AAAA,IACH;AACA,IAAA,KAAA,MAAW,MAAA,IAAUA,OAAM,OAAA,EAAS;AAClC,MAAA,IAAI,CAAC,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA,EAAG;AAC3B,QAAA,GAAA,CAAI,QAAA,CAAS;AAAA,UACX,IAAA,EAAM,QAAA;AAAA,UACN,OAAA,EAAS,oCAAoC,MAAM,CAAA,CAAA,CAAA;AAAA,UACnD,IAAA,EAAM,CAAC,SAAA,EAAW,QAAQ;AAAA,SAC3B,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,aAAA,CAAc,OAAkB,GAAA,EAAsB;AAC7D,EAAA,MAAM,cAAc,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA;AACnD,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,MAAA,CAAO,QAAQ,KAAA,CAAM,KAAA,IAAS,EAAE,CAAA,EAAG;AAC5D,IAAA,IAAI,CAAC,MAAM,MAAA,IAAU,CAAC,YAAY,QAAA,CAAS,IAAA,CAAK,EAAE,CAAA,EAAG;AACnD,MAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,SAAS,CAAA,gCAAA,EAAmC,IAAA,CAAK,EAAE,CAAA,CAAA,CAAA,EAAK,MAAM,CAAC,OAAA,EAAS,IAAA,EAAM,IAAI,GAAG,CAAA;AAAA,IACtH;AACA,IAAA,IAAI,KAAK,OAAA,IAAW,IAAA,CAAK,EAAA,CAAG,QAAA,CAAS,GAAG,CAAA,EAAG;AACzC,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,sFAAA;AAAA,QACT,IAAA,EAAM,CAAC,OAAA,EAAS,IAAA,EAAM,SAAS;AAAA,OAChC,CAAA;AAAA,IACH;AACA,IAAA,IAAI,IAAA,CAAK,OAAA,IAAW,KAAA,CAAM,MAAA,EAAQ;AAChC,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,gFAAA;AAAA,QACT,IAAA,EAAM,CAAC,OAAA,EAAS,IAAA,EAAM,SAAS;AAAA,OAChC,CAAA;AAAA,IACH;AAAA,EACF;AACF;AAQA,SAAS,0BAAA,CAA2B,OAAkB,GAAA,EAAsB;AAC1E,EAAA,MAAM,WAAA,GAAc,UAAA,CAAW,KAAA,CAAM,KAAA,EAAO,QAAQ,CAAA;AACpD,EAAA,IAAI,CAAC,KAAA,CAAM,MAAA,IAAU,WAAA,CAAY,SAAS,qBAAA,EAAuB;AAC/D,IAAA,GAAA,CAAI,QAAA,CAAS;AAAA,MACX,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS,CAAA,uDAAA,EAAqD,WAAW,CAAA,qBAAA,EAAwB,qBAAqB,CAAA,sBAAA,CAAA;AAAA,MACtH,IAAA,EAAM,CAAC,OAAO;AAAA,KACf,CAAA;AAAA,EACH;AACA,EAAA,KAAA,MAAW,CAAC,UAAUA,MAAK,CAAA,IAAA,CAAM,MAAM,OAAA,IAAW,EAAC,EAAG,OAAA,EAAQ,EAAG;AAC/D,IAAA,MAAM,IAAA,GAAO,SAAA,CAAU,KAAA,CAAM,KAAA,EAAOA,MAAK,CAAA;AACzC,IAAA,IAAI,IAAA,CAAK,SAAS,qBAAA,EAAuB;AACvC,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,CAAA,oBAAA,EAAuB,IAAI,CAAA,qBAAA,EAAwB,qBAAqB,CAAA,yDAAA,CAAA;AAAA,QACjF,IAAA,EAAM,CAAC,SAAA,EAAW,QAAQ;AAAA,OAC3B,CAAA;AAAA,IACH;AAAA,EACF;AACA,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,MAAA,CAAO,QAAQ,KAAA,CAAM,KAAA,IAAS,EAAE,CAAA,EAAG;AAC5D,IAAA,MAAM,UAAA,GAAa,cAAA,CAAe,KAAA,CAAM,KAAA,EAAO,IAAI,CAAA;AACnD,IAAA,IAAI,IAAA,CAAK,OAAA,IAAW,UAAA,CAAW,MAAA,GAAS,qBAAA,EAAuB;AAC7D,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,CAAA,0BAAA,EAA6B,UAAU,CAAA,qBAAA,EAAwB,qBAAqB,CAAA,4DAAA,CAAA;AAAA,QAC7F,IAAA,EAAM,CAAC,OAAA,EAAS,IAAI;AAAA,OACrB,CAAA;AAAA,IACH;AAAA,EACF;AACA,EAAA,KAAA,MAAW,QAAQ,MAAA,CAAO,IAAA,CAAK,MAAM,OAAA,IAAW,EAAE,CAAA,EAAG;AAEnD,IAAA,MAAM,MAAA,GAAS,UAAU,IAAI,CAAA,CAAA;AAC7B,IAAA,IAAI,MAAA,CAAO,SAAS,qBAAA,EAAuB;AACzC,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,CAAA,8BAAA,EAAiC,MAAM,CAAA,qBAAA,EAAwB,qBAAqB,CAAA,qDAAA,CAAA;AAAA,QAC7F,IAAA,EAAM,CAAC,SAAA,EAAW,IAAI;AAAA,OACvB,CAAA;AAAA,IACH;AAAA,EACF;AACF;AAGA,IAAM,WAAA,GAA4G;AAAA,EAChH,OAAA,EAAS,SAAA;AAAA,EACT,MAAA,EAAQ,SAAA;AAAA,EACR,OAAA,EAAS,SAAA;AAAA,EACT,MAAA,EAAQ,SAAA;AAAA,EACR,IAAA,EAAM,MAAA;AAAA,EACN,IAAA,EAAM,MAAA;AAAA,EACN,IAAA,EAAM,UAAA;AAAA,EACN,WAAA,EAAa,UAAA;AAAA,EACb,OAAA,EAAS,SAAA;AAAA,EACT,KAAA,EAAO;AACT,CAAA;AAEO,IAAM,eAAA,GAAkB,CAAC,IAAA,KAA6B,WAAA,CAAY,IAAI,CAAA;AAE7E,SAAS,qBAAA,CAAsB,OAAkB,GAAA,EAAsB;AACrE,EAAA,IAAI,MAAM,MAAA,EAAQ;AAClB,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,IAAW,EAAC;AAClC,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AACvC,EAAA,KAAA,MAAW,IAAA,IAAQ,CAAC,MAAA,EAAQ,OAAO,CAAA,EAAY;AAC7C,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,QAAA,GAAW,IAAI,CAAA;AACvC,IAAA,IAAI,CAAC,SAAA,EAAW;AAChB,IAAA,KAAA,MAAW,MAAA,IAAU,iBAAA,CAAkB,SAAA,CAAU,GAAG,CAAA,EAAG;AACrD,MAAA,IAAI,CAAC,WAAA,CAAY,QAAA,CAAS,MAAM,CAAA,EAAG;AACjC,QAAA,GAAA,CAAI,QAAA,CAAS;AAAA,UACX,IAAA,EAAM,QAAA;AAAA,UACN,OAAA,EAAS,qCAAqC,MAAM,CAAA,CAAA,CAAA;AAAA,UACpD,IAAA,EAAM,CAAC,UAAA,EAAY,IAAI;AAAA,SACxB,CAAA;AAAA,MACH;AAAA,IACF;AACA,IAAA,aAAA,CAAc,SAAA,CAAU,GAAA,EAAK,CAAC,IAAA,KAAS;AACrC,MAAA,IAAI,IAAA,CAAK,SAAS,SAAA,EAAW;AAC7B,MAAA,MAAM,QAAQ,mBAAA,CAAoB,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,OAAO,OAAO,CAAA;AAChE,MAAA,IAAI,KAAA,EAAO,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,KAAA,EAAO,IAAA,EAAM,CAAC,UAAA,EAAY,IAAI,GAAG,CAAA;AAAA,IACtF,CAAC,CAAA;AAAA,EACH;AACF;AAOA,SAAS,mBAAA,CACP,IAAA,EACA,KAAA,EACA,OAAA,EACe;AACf,EAAA,MAAM,UAAU,CAAC,OAAA,KACf,OAAA,CAAQ,IAAA,KAAS,WAAY,OAAA,CAAQ,OAAA,CAAQ,IAAI,CAAA,GAAI,YAAY,OAAA,CAAQ,OAAA,CAAQ,IAAI,CAAA,CAAG,IAAI,IAAI,IAAA,GAAQ,IAAA;AAE1G,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,QAAA,IAAY,KAAA,CAAM,SAAS,QAAA,EAAU;AACrD,IAAA,MAAM,SAAA,GAAY,QAAQ,IAAI,CAAA;AAC9B,IAAA,MAAM,UAAA,GAAa,QAAQ,KAAK,CAAA;AAChC,IAAA,IAAI,SAAA,IAAa,UAAA,IAAc,SAAA,KAAc,UAAA,EAAY;AACvD,MAAA,OAAO,oBAAoB,IAAA,CAAK,IAAI,CAAA,GAAA,EAAM,OAAA,CAAQ,KAAK,IAAI,CAAA,CAAG,IAAI,CAAA,QAAA,EAAW,MAAM,IAAI,CAAA,GAAA,EAAM,QAAQ,KAAA,CAAM,IAAI,EAAG,IAAI,CAAA,2BAAA,CAAA;AAAA,IACxH;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAA,GAAS,KAAK,IAAA,KAAS,QAAA,GAAW,OAAO,KAAA,CAAM,IAAA,KAAS,WAAW,KAAA,GAAQ,IAAA;AACjF,EAAA,MAAM,OAAA,GAAU,KAAK,IAAA,KAAS,SAAA,GAAY,OAAO,KAAA,CAAM,IAAA,KAAS,YAAY,KAAA,GAAQ,IAAA;AACpF,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,WAAW,OAAA,CAAQ,KAAA,KAAU,MAAM,OAAO,IAAA;AAC1D,EAAA,MAAM,WAAA,GAAc,QAAQ,MAAM,CAAA;AAClC,EAAA,IAAI,CAAC,aAAa,OAAO,IAAA;AAKzB,EAAA,IAAI,OAAO,OAAA,CAAQ,KAAA,KAAU,QAAA,EAAU,OAAO,IAAA;AAC9C,EAAA,MAAM,YAAA,GAAe,OAAO,OAAA,CAAQ,KAAA,KAAU,WAAW,SAAA,GAAY,SAAA;AACrE,EAAA,IAAI,iBAAiB,WAAA,EAAa;AAChC,IAAA,OAAO,CAAA,iBAAA,EAAoB,MAAA,CAAO,IAAI,CAAA,GAAA,EAAM,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAA,CAAG,IAAI,CAAA,SAAA,EAAY,OAAO,OAAA,CAAQ,KAAK,CAAA,kCAAA,CAAA;AAAA,EACxG;AACA,EAAA,OAAO,IAAA;AACT;;;ACrUO,IAAM,yBAAA,GAA4B,CAAC,QAAA,EAAU,QAAA,EAAU,UAAU,QAAQ,CAAA;AAMhF,IAAM,kBAAkB,CAAC,MAAA,EAAQ,QAAA,EAAU,QAAA,EAAU,UAAU,OAAO,CAAA;AAc/D,SAAS,mBAAmB,UAAA,EAA2C;AAC5E,EAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,aAAA,CAAc,UAAA,CAAW,SAAS,CAAC,CAAA;AAClE,EAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,gBAAA,CAAiB,UAAA,CAAW,SAAS,CAAC,CAAA;AACnE,EAAA,MAAM,MAAA,GAAS,aAAa,UAAU,CAAA;AAEtC,EAAA,MAAM,QAAQ,MAAA,CAAO,GAAA;AAAA,IACnB,CAAC,UAAU,CAAA,YAAA,EAAe,MAAM,IAAI,eAAA,CAAgB,KAAA,CAAM,KAAK,CAAC,CAAA,yBAAA;AAAA,GAClE;AACA,EAAA,MAAM,QAAA,GAAW,OAAO,OAAA,CAAQ,CAAC,UAAU,gBAAA,CAAiB,MAAA,EAAQ,KAAK,CAAC,CAAA;AAC1E,EAAA,MAAM,SAAS,MAAA,CAAO,GAAA;AAAA,IACpB,CAAC,KAAA,KACC,CAAA,MAAA,EAAS,yBAAA,CAA0B,KAAK,IAAI,CAAC,CAAA,IAAA,EAAO,MAAM,IAAI,eAAA,CAAgB,KAAA,CAAM,KAAK,CAAC,OAAO,IAAI,CAAA;AAAA,GACzG;AACA,EAAA,OAAO,CAAC,GAAG,KAAA,EAAO,GAAG,QAAA,EAAU,CAAA,sBAAA,EAAyB,MAAM,CAAA,IAAA,EAAO,IAAI,CAAA,CAAA,EAAI,GAAG,MAAM,CAAA;AACxF;AAOO,SAAS,oBAAA,CAAqB,YAAoB,MAAA,EAAqC;AAC5F,EAAA,MAAM,MAAA,GAAS,gBAAgB,UAAU,CAAA;AACzC,EAAA,OAAO,MAAA,CAAO,OAAA;AAAA,IAAQ,CAAC,UACrB,eAAA,CAAgB,GAAA;AAAA,MACd,CAAC,MAAA,KAAW,CAAA,sBAAA,EAAyB,eAAA,CAAgB,WAAiB,KAAA,EAAO,MAAM,CAAC,CAAC,CAAA,IAAA,EAAO,MAAM,CAAA,CAAA,EAAI,eAAA,CAAgB,KAAK,CAAC,CAAA;AAAA;AAC9H,GACF;AACF;AAEA,SAAS,gBAAA,CAAiB,QAAgB,KAAA,EAA4B;AACpE,EAAA,MAAM,YAAY,CAAA,EAAG,MAAM,IAAI,eAAA,CAAgB,KAAA,CAAM,KAAK,CAAC,CAAA,CAAA;AAC3D,EAAA,MAAMG,WAAAA,GAAa,CAAC,MAAA,KAAmB,eAAA,CAAgB,WAAiB,KAAA,CAAM,KAAA,EAAO,MAAM,CAAC,CAAA;AAC5F,EAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,GAAA,CAAI,CAAC,MAAA,KAAW,CAAA,sBAAA,EAAyBA,WAAAA,CAAW,MAAM,CAAC,CAAA,IAAA,EAAO,SAAS,CAAA,CAAE,CAAA;AAChH,EAAA,MAAM,cAAc,MAAA,CAAO,WAAA;AAAA,IACzB,OAAO,OAAA,CAAQ,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,MAAM,MAAM,CAAA,KAAM,CAAC,IAAA,EAAM,MAAA,CAAO,IAAI,CAAC;AAAA,GACjF;AAEA,EAAA,MAAM,IAAA,GAAO,MAAM,QAAA,EAAU,IAAA;AAC7B,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,UAAA,CAAW,IAAA,CAAK,CAAA,cAAA,EAAiBA,WAAAA,CAAW,MAAM,CAAC,CAAA,IAAA,EAAO,SAAS,CAAA,mBAAA,EAAsB,gBAAA,CAAiB,IAAA,CAAK,GAAA,EAAK,WAAW,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,EACrI;AACA,EAAA,MAAM,KAAA,GAAQ,MAAM,QAAA,EAAU,KAAA;AAC9B,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,MAAM,SAAA,GAAY,gBAAA,CAAiB,KAAA,CAAM,GAAA,EAAK,WAAW,CAAA;AACzD,IAAA,UAAA,CAAW,IAAA,CAAK,iBAAiBA,WAAAA,CAAW,QAAQ,CAAC,CAAA,IAAA,EAAO,SAAS,CAAA,wBAAA,EAA2B,SAAS,CAAA,CAAA,CAAG,CAAA;AAC5G,IAAA,UAAA,CAAW,IAAA;AAAA,MACT,CAAA,cAAA,EAAiBA,YAAW,QAAQ,CAAC,OAAO,SAAS,CAAA,mBAAA,EAAsB,SAAS,CAAA,cAAA,EAAiB,SAAS,CAAA,CAAA;AAAA,KAChH;AACA,IAAA,UAAA,CAAW,IAAA,CAAK,iBAAiBA,WAAAA,CAAW,QAAQ,CAAC,CAAA,IAAA,EAAO,SAAS,CAAA,mBAAA,EAAsB,SAAS,CAAA,CAAA,CAAG,CAAA;AAAA,EACzG;AACA,EAAA,OAAO,UAAA;AACT;AAEO,IAAM,YAAA,GAAe,CAAC,UAAA,KAC3B,UAAA,CAAW,MAAA,CAAO,OAAO,CAAC,KAAA,KAAU,CAAC,KAAA,CAAM,MAAM,CAAA;ACzDnD,IAAM,SAAA,GAAyD;AAAA,EAC7D,IAAA,EAAM,CAAC,IAAA,KAASC,WAAA,CAAK,IAAI,CAAA;AAAA,EACzB,IAAA,EAAM,CAAC,IAAA,KAASC,WAAA,CAAK,IAAI,CAAA;AAAA,EACzB,OAAA,EAAS,CAAC,IAAA,KAASC,cAAA,CAAQ,IAAI,CAAA;AAAA;AAAA;AAAA,EAG/B,MAAA,EAAQ,CAAC,IAAA,KAASC,aAAA,CAAO,MAAM,EAAE,IAAA,EAAM,UAAU,CAAA;AAAA,EACjD,OAAA,EAAS,CAAC,IAAA,KAASC,cAAA,CAAQ,IAAI,CAAA;AAAA,EAC/B,MAAA,EAAQ,CAAC,IAAA,KAASC,sBAAA,CAAgB,IAAI,CAAA;AAAA,EACtC,OAAA,EAAS,CAAC,IAAA,KAASC,cAAA,CAAQ,IAAI,CAAA;AAAA,EAC/B,WAAA,EAAa,CAAC,IAAA,KAASC,gBAAA,CAAU,MAAM,EAAE,YAAA,EAAc,MAAM,CAAA;AAAA,EAC7D,IAAA,EAAM,CAAC,IAAA,KAASC,WAAA,CAAK,IAAI,CAAA;AAAA,EACzB,KAAA,EAAO,CAAC,IAAA,KAASC,YAAA,CAAM,IAAI;AAC7B,CAAA;AAEO,SAAS,WAAA,CAAY,MAAc,UAAA,EAAuC;AAC/E,EAAA,IAAI,MAAA,GAAS,SAAA,CAAU,UAAA,CAAW,IAAI,EAAE,IAAI,CAAA;AAC5C,EAAA,IAAI,UAAA,CAAW,WAAA,EAAa,MAAA,GAAS,MAAA,CAAO,UAAA,EAAW;AACvD,EAAA,IAAI,UAAA,CAAW,aAAa,KAAA,IAAS,CAAC,WAAW,WAAA,EAAa,MAAA,GAAS,OAAO,OAAA,EAAQ;AACtF,EAAA,IAAI,WAAW,MAAA,IAAU,CAAC,WAAW,WAAA,EAAa,MAAA,GAAS,OAAO,MAAA,EAAO;AACzE,EAAA,IAAI,UAAA,CAAW,YAAY,MAAA,EAAW;AACpC,IAAA,MAAM,QAAQ,UAAA,CAAW,OAAA;AAGzB,IAAA,MAAA,GAAS,MAAA,CAAO,OAAA;AAAA,MACd,OAAO,KAAA,KAAU,QAAA,IAAY,iBAAA,CAAkB,KAAA,EAAO,UAAA,CAAW,IAAI,CAAA,GAAIZ,cAAA,CAAI,GAAA,CAAI,KAAK,CAAA,GAAI;AAAA,KAC5F;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;;;AClCA,IAAM,iBAAA,GAAoB,SAAA;AAQnB,SAAS,qBAAqB,UAAA,EAAkD;AACrF,EAAA,MAAM,UAAA,GAAa,aAAA,CAAc,UAAA,CAAW,SAAS,CAAA;AACrD,EAAA,MAAM,MAAA,GAASa,gBAAS,UAAU,CAAA;AAClC,EAAA,MAAM,OAAA,GAAmC,EAAE,CAAC,iBAAiB,GAAG,MAAA,EAAO;AACvE,EAAA,MAAM,SAAoD,EAAC;AAC3D,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAqC;AAEvD,EAAA,KAAA,MAAW,KAAA,IAAS,mBAAA,CAAoB,YAAA,CAAa,UAAU,CAAC,CAAA,EAAG;AACjE,IAAA,MAAM,YAAA,GAAe,UAAA,CAAW,MAAA,EAAQ,KAAA,EAAO,KAAK,CAAA;AACpD,IAAA,KAAA,CAAM,GAAA,CAAI,KAAA,CAAM,KAAA,EAAO,YAAuC,CAAA;AAC9D,IAAA,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAA,GAAI,YAAA;AAGvB,IAAA,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,GAAI,YAAA;AAAA,EACxB;AACA,EAAA,OAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAW;AACvC;AAEA,SAAS,UAAA,CACP,MAAA,EACA,KAAA,EACA,KAAA,EACA;AACA,EAAA,MAAM,UAAU,MAAA,CAAO,WAAA;AAAA,IACrB,OAAO,OAAA,CAAQ,KAAA,CAAM,WAAW,EAAE,EAAE,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,MAAM,MAAM,CAAC,IAAA,EAAM,YAAY,IAAA,EAAM,MAAM,CAAC,CAAC;AAAA,GAC/F;AAEA,EAAA,MAAM,eAAe,MAAA,CAAO,KAAA,CAAM,MAAM,KAAA,EAAO,OAAA,EAAkB,CAAC,IAAA,KAAkC;AAAA,IAClG,GAAG,YAAA,CAAa,KAAA,EAAO,IAAI,CAAA;AAAA,IAC3B,GAAG,gBAAA,CAAiB,KAAA,EAAO,IAAA,EAAM,KAAK;AAAA,GACvC,CAAA;AAGD,EAAA,OAAO,aAAa,SAAA,EAAU;AAChC;AAEA,SAAS,YAAA,CAAa,OAAkB,IAAA,EAA+B;AACrE,EAAA,OAAA,CAAQ,MAAM,OAAA,IAAW,EAAC,EAAG,GAAA,CAAI,CAAC,UAAA,KAAe;AAC/C,IAAA,MAAM,IAAA,GAAO,SAAA,CAAU,KAAA,CAAM,KAAA,EAAO,UAAU,CAAA;AAC9C,IAAA,MAAM,UAAU,UAAA,CAAW,MAAA,GAASC,mBAAY,IAAI,CAAA,GAAIf,aAAM,IAAI,CAAA;AAClE,IAAA,MAAM,OAAA,GAAU,WAAW,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW,IAAA,CAAK,MAAM,CAAC,CAAA;AAC/D,IAAA,OAAO,OAAA,CAAQ,EAAA,CAAG,GAAI,OAA+B,CAAA;AAAA,EACvD,CAAC,CAAA;AACH;AAEA,SAAS,gBAAA,CACP,KAAA,EACA,IAAA,EACA,KAAA,EACA;AACA,EAAA,OAAO,MAAA,CAAO,QAAQ,KAAA,CAAM,KAAA,IAAS,EAAE,CAAA,CACpC,OAAO,CAAC,GAAG,IAAI,CAAA,KAAM,KAAK,OAAO,CAAA,CACjC,IAAI,CAAC,CAAC,IAAA,EAAM,IAAI,CAAA,KAAM;AAGrB,IAAA,MAAM,MAAA,GAAS,KAAK,EAAA,KAAO,KAAA,CAAM,QAAQ,IAAA,GAAO,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA;AACjE,IAAA,MAAM,YAAA,GAAe,MAAA,IAAU,oBAAA,CAAqB,MAAM,CAAA;AAC1D,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,YAAA,EAAc;AAC5B,MAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,eAAA,EAAkB,IAAI,CAAA,MAAA,EAAS,MAAM,KAAK,CAAA,uBAAA,EAA0B,IAAA,CAAK,EAAE,CAAA,CAAA,CAAG,CAAA;AAAA,IAC7G;AACA,IAAA,OAAOgB,iBAAA,CAAW;AAAA,MAChB,IAAA,EAAM,cAAA,CAAe,KAAA,CAAM,KAAA,EAAO,IAAI,CAAA;AAAA,MACtC,OAAA,EAAS,CAAC,IAAA,CAAK,IAAA,CAAK,EAAE,CAAC,CAAA;AAAA,MACvB,cAAA,EAAgB,CAAC,YAAY;AAAA,KAC9B,CAAA;AAAA,EACH,CAAC,CAAA;AACL;AAEA,SAAS,qBAAqB,MAAA,EAA0C;AACtE,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,CAAE,MAAA;AAAA,IACpC,CAAC,KAAA,KAAU,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,YAAY,SAAA,IAAc;AAAA,GAC1E;AACA,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,CAAC,MAAA,KAAY,OAAgC,OAAO,CAAA;AAC1E;AAGA,SAAS,oBAAoB,MAAA,EAA2C;AACtE,EAAA,MAAM,SAAA,GAAY,IAAI,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,CAAC,KAAA,CAAM,KAAA,EAAO,KAAK,CAAC,CAAC,CAAA;AACrE,EAAA,MAAM,SAAsB,EAAC;AAC7B,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAY;AAE/B,EAAA,OAAO,SAAA,CAAU,OAAO,CAAA,EAAG;AACzB,IAAA,MAAM,QAAQ,CAAC,GAAG,SAAA,CAAU,MAAA,EAAQ,CAAA,CAAE,MAAA;AAAA,MAAO,CAAC,KAAA,KAC5C,eAAA,CAAgB,KAAK,CAAA,CAAE,MAAM,CAAC,MAAA,KAAW,MAAA,CAAO,GAAA,CAAI,MAAM,CAAA,IAAK,CAAC,SAAA,CAAU,GAAA,CAAI,MAAM,CAAC;AAAA,KACvF;AACA,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,mCAAA,EAAsC,CAAC,GAAG,SAAA,CAAU,IAAA,EAAM,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,IACvG;AACA,IAAA,KAAA,MAAW,SAAS,KAAA,EAAO;AACzB,MAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AACjB,MAAA,MAAA,CAAO,GAAA,CAAI,MAAM,KAAK,CAAA;AACtB,MAAA,SAAA,CAAU,MAAA,CAAO,MAAM,KAAK,CAAA;AAAA,IAC9B;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEA,IAAM,eAAA,GAAkB,CAAC,KAAA,KACvB,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,KAAA,IAAS,EAAE,CAAA,CAE5B,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,OAAA,IAAW,CAAC,oBAAA,CAAqB,IAAA,CAAK,EAAE,CAAA,IAAK,IAAA,CAAK,EAAA,KAAO,KAAA,CAAM,KAAK,CAAA,CAC1F,GAAA,CAAI,CAAC,IAAA,KAAS,KAAK,EAAE,CAAA;;;ACtGnB,SAAS,gBAAA,CAAiB,YAAiCC,WAAAA,EAAwC;AACxG,EAAA,MAAM,EAAE,OAAA,EAAS,UAAA,EAAW,GAAI,qBAAqB,UAAU,CAAA;AAC/D,EAAA,OAAOC,uBAAA,CAAoB,OAAA,EAASD,WAAAA,EAAY,CAAC,UAAU,CAAC,CAAA;AAC9D;AAEO,IAAM,aAAA,GAAgB,CAAC,SAAA,KAC5BC,uBAAA,CAAoB,EAAC,EAAG,MAAA,EAAW,CAAC,aAAA,CAAc,SAAS,CAAC,CAAC;AAE/D,IAAM,wBAAA,GAA4BA,uBAAA,CAAoB,EAAE,CAAA,CAA0B,OAAA;AAS3E,SAAS,kBAAkB,QAAA,EAAgD;AAChF,EAAA,MAAM,QAAA,GAAWC,iBAAa,QAAmC,CAAA;AACjE,EAAA,MAAM,UAAW,QAAA,CAAmC,OAAA;AACpD,EAAA,IAAI,YAAY,wBAAA,EAA0B;AACxC,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,iBAAA,EAAoB,MAAA,CAAO,OAAO,CAAC,qDAAqD,wBAAwB,CAAA,uCAAA;AAAA,KAClH;AAAA,EACF;AACA,EAAA,OAAO,QAAA;AACT;AAEO,SAAS,cAAA,CAAe,UAA6B,OAAA,EAA+C;AACzG,EAAA,qBAAA,CAAsB,UAAU,OAAO,CAAA;AACvC,EAAA,OAAOC,qBAAA,CAAkB,UAAmB,OAAgB,CAAA;AAC9D;AAUA,SAAS,qBAAA,CAAsB,UAA6B,OAAA,EAAkC;AAC5F,EAAA,MAAM,cAAA,GAAiB,SAAS,QAAQ,CAAA;AACxC,EAAA,MAAM,aAAA,GAAgB,SAAS,OAAO,CAAA;AAEtC,EAAA,MAAM,aAAA,GAAgB,CAAC,GAAG,cAAA,CAAe,MAAM,CAAA,CAAE,MAAA,CAAO,CAAC,IAAA,KAAS,CAAC,aAAA,CAAc,GAAA,CAAI,IAAI,CAAC,CAAA;AAC1F,EAAA,MAAM,WAAA,GAAc,CAAC,GAAG,aAAA,CAAc,MAAM,CAAA,CAAE,MAAA,CAAO,CAAC,IAAA,KAAS,CAAC,cAAA,CAAe,GAAA,CAAI,IAAI,CAAC,CAAA;AACxF,EAAA,IAAI,aAAA,CAAc,MAAA,GAAS,CAAA,IAAK,WAAA,CAAY,SAAS,CAAA,EAAG;AACtD,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,gCAAA,EAAmC,YAAY,IAAA,CAAK,IAAI,CAAC,CAAA,eAAA,EAAkB,aAAA,CAAc,IAAA,CAAK,IAAI,CAAC,CAAA,yEAAA;AAAA,KACrG;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,eAAe,CAAA,IAAK,cAAA,EAAgB;AACpD,IAAA,MAAM,cAAA,GAAiB,aAAA,CAAc,GAAA,CAAI,IAAI,CAAA;AAC7C,IAAA,IAAI,CAAC,cAAA,EAAgB;AACrB,IAAA,MAAM,OAAA,GAAU,CAAC,GAAG,eAAe,CAAA,CAAE,MAAA,CAAO,CAAC,MAAA,KAAW,CAAC,cAAA,CAAe,GAAA,CAAI,MAAM,CAAC,CAAA;AACnF,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,cAAc,CAAA,CAAE,MAAA,CAAO,CAAC,MAAA,KAAW,CAAC,eAAA,CAAgB,GAAA,CAAI,MAAM,CAAC,CAAA;AACjF,IAAA,IAAI,OAAA,CAAQ,MAAA,GAAS,CAAA,IAAK,KAAA,CAAM,SAAS,CAAA,EAAG;AAC1C,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,CAAA,mBAAA,EAAsB,IAAI,CAAA,oBAAA,EAAuB,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,eAAA,EAAkB,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,mHAAA;AAAA,OACvG;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,SAAS,QAAA,EAAuD;AACvE,EAAA,MAAM,MAAA,GAAU,QAAA,CAAwD,MAAA,IAAU,EAAC;AACnF,EAAA,OAAO,IAAI,GAAA;AAAA,IACT,MAAA,CAAO,OAAO,MAAM,CAAA,CAAE,IAAI,CAAC,KAAA,KAAU,CAAC,CAAA,EAAG,KAAA,CAAM,MAAM,IAAI,KAAA,CAAM,IAAI,CAAA,CAAA,EAAI,IAAI,GAAA,CAAI,MAAA,CAAO,KAAK,KAAA,CAAM,OAAO,CAAC,CAAC,CAAC;AAAA,GAC7G;AACF;AAeO,SAAS,mBAAA,CAAoB,UAA6B,UAAA,EAAiD;AAChH,EAAA,MAAM,QAAA,GAAW,gBAAgB,QAAQ,CAAA;AACzC,EAAA,MAAM,aAAuB,EAAC;AAC9B,EAAA,MAAM,UAAA,GAAa,aAAA,CAAc,UAAA,CAAW,SAAS,CAAA;AACrD,EAAA,MAAM,SAAA,GAAY,CAAC,KAAA,KAAkB,CAAA,EAAG,eAAA,CAAgB,UAAU,CAAC,CAAA,CAAA,EAAI,eAAA,CAAgB,KAAK,CAAC,CAAA,CAAA;AAE7F,EAAA,KAAA,MAAW,KAAA,IAAS,YAAA,CAAa,UAAU,CAAA,EAAG;AAC5C,IAAA,MAAM,aAAA,GAAgB,SAAA,CAAU,QAAA,EAAU,UAAA,EAAY,MAAM,KAAK,CAAA;AACjE,IAAA,IAAI,CAAC,aAAA,EAAe;AAEpB,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,MAAM,CAAA,IAAK,MAAA,CAAO,QAAQ,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA,EAAG;AAChE,MAAA,IAAI,OAAO,YAAA,EAAc;AACvB,QAAA,MAAM,cAAA,GAAiB,aAAA,CAAc,OAAA,CAAQ,MAAA,CAAO,YAAY,CAAA;AAChE,QAAA,IAAI,cAAA,IAAkB,aAAA,CAAc,OAAA,CAAQ,IAAI,CAAA,EAAG;AAIjD,UAAA,MAAM,IAAI,kBAAA;AAAA,YACR,IAAI,KAAA,CAAM,KAAK,IAAI,IAAI,CAAA,yBAAA,EAA4B,OAAO,YAAY,CAAA,+FAAA;AAAA,WACxE;AAAA,QACF;AACA,QAAA,IAAI,cAAA,EAAgB;AAClB,UAAA,UAAA,CAAW,IAAA;AAAA,YACT,CAAA,YAAA,EAAe,SAAA,CAAU,KAAA,CAAM,KAAK,CAAC,CAAA,eAAA,EAAkB,eAAA,CAAgB,MAAA,CAAO,YAAY,CAAC,CAAA,IAAA,EAAO,eAAA,CAAgB,IAAI,CAAC,CAAA;AAAA,WACzH;AACA,UAAA,OAAO,aAAA,CAAc,OAAA,CAAQ,MAAA,CAAO,YAAY,CAAA;AAChD,UAAA,aAAA,CAAc,QAAQ,IAAI,CAAA,GAAI,EAAE,GAAG,gBAAgB,IAAA,EAAK;AAAA,QAC1D,CAAA,MAAA,IAAW,CAAC,aAAA,CAAc,OAAA,CAAQ,IAAI,CAAA,EAAG;AAKvC,UAAA,MAAM,IAAI,kBAAA;AAAA,YACR,IAAI,KAAA,CAAM,KAAK,IAAI,IAAI,CAAA,yBAAA,EAA4B,OAAO,YAAY,CAAA,mFAAA;AAAA,WACxE;AAAA,QACF;AAAA,MACF;AAEA,MAAA,MAAM,OAAO,MAAA,CAAO,IAAA,GAAO,SAAA,CAAU,MAAA,CAAO,IAAI,CAAA,GAAI,IAAA;AACpD,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,MAAM,OAAA,GAAU,aAAA,CAAc,OAAA,CAAQ,IAAI,CAAA;AAC1C,QAAA,MAAM,UAAA,GAAa,WAAA,CAAY,MAAA,CAAO,IAAI,CAAA;AAC1C,QAAA,IAAI,OAAA,IAAW,OAAA,CAAQ,IAAA,KAAS,UAAA,EAAY;AAC1C,UAAA,UAAA,CAAW,IAAA;AAAA,YACT,eAAe,SAAA,CAAU,KAAA,CAAM,KAAK,CAAC,iBAAiB,eAAA,CAAgB,IAAI,CAAC,CAAA,MAAA,EAAS,UAAU,CAAA,OAAA,EAAU,eAAA,CAAgB,IAAI,CAAC,KAAK,UAAU,CAAA;AAAA,WAC9I;AACA,UAAA,OAAA,CAAQ,IAAA,GAAO,UAAA;AAAA,QACjB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,EAAE,YAAY,QAAA,EAAS;AAChC;AAEA,SAAS,SAAA,CAAU,QAAA,EAA6B,MAAA,EAAgB,KAAA,EAA0C;AACxG,EAAA,MAAM,MAAA,GAAU,QAAA,CAAwD,MAAA,IAAU,EAAC;AACnF,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,CAAE,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,MAAA,KAAW,MAAA,IAAU,KAAA,CAAM,IAAA,KAAS,KAAK,CAAA;AAC9F;AAGO,SAAS,kBAAA,CAAmB,UAA6B,MAAA,EAA0B;AACxF,EAAA,MAAM,MAAA,GAAU,QAAA,CAAwD,MAAA,IAAU,EAAC;AACnF,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,CACxB,OAAO,CAAC,KAAA,KAAU,KAAA,CAAM,MAAA,KAAW,MAAM,CAAA,CACzC,GAAA,CAAI,CAAC,KAAA,KAAU,MAAM,IAAI,CAAA;AAC9B;AChKA,IAAM,kBAAkB,IAAI,MAAA;AAAA,EAC1B;AAAA,IACE,MAAA,CAAO,GAAA,CAAA,4BAAA,CAAA;AAAA,IACP,MAAA,CAAO,GAAA,CAAA,oBAAA,CAAA;AAAA,IACP,MAAA,CAAO,GAAA,CAAA,gCAAA,CAAA;AAAA,IACP,MAAA,CAAO,GAAA,CAAA,4CAAA,CAAA;AAAA;AAAA;AAAA,IAGP,MAAA,CAAO,GAAA,CAAA,sBAAA;AAAA,GACT,CAAE,KAAK,GAAG,CAAA;AAAA,EACV;AACF,CAAA;AAQO,SAAS,iBAAiB,SAAA,EAA4B;AAC3D,EAAA,OAAO,eAAA,CAAgB,KAAK,SAAS,CAAA;AACvC;AASA,eAAsB,oBAAA,CAAqB;AAAA,EACzC,UAAA;AAAA,EACA;AACF,CAAA,EAIsB;AACpB,EAAA,MAAM,EAAE,OAAA,EAAS,UAAA,EAAW,GAAI,qBAAqB,UAAU,CAAA;AAC/D,EAAA,MAAM,EAAE,mBAAA,EAAoB,GAAI,MAAM,aAAA;AAAA,IAAc,MAClDC,eAAW,OAAA,EAAS,WAAA,CAAY,EAAE,CAAA,EAAY,CAAC,UAAU,CAAC;AAAA,GAC5D;AACA,EAAA,OAAO,mBAAA,CAAoB,OAAO,CAAC,SAAA,KAAc,CAAC,eAAA,CAAgB,IAAA,CAAK,SAAS,CAAC,CAAA;AACnF;AAYA,SAAS,YAAY,EAAA,EAAsE;AACzF,EAAA,MAAM,OAAA,GAAW,EAAA,CAAyD,OAAA,CAAQ,IAAA,CAAK,EAAE,CAAA;AACzF,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,OAAO,KAAA,KAAU;AACxB,MAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,KAAK,CAAA;AAClC,MAAA,IAAI,UAAU,OAAO,MAAA,KAAW,QAAA,IAAY,MAAA,IAAU,QAAQ,OAAO,MAAA;AACrE,MAAA,OAAO,EAAE,MAAM,MAAA,EAAO;AAAA,IACxB;AAAA,GACF;AACF;AAcA,IAAI,cAAA,GAAmC,QAAQ,OAAA,EAAQ;AAEvD,SAAS,cAAiB,GAAA,EAAmC;AAC3D,EAAA,MAAM,OAAO,cAAA,CAAe,IAAA,CAAK,MAAM,UAAA,CAAW,GAAG,CAAC,CAAA;AAGtD,EAAA,cAAA,GAAiB,IAAA,CAAK,IAAA;AAAA,IACpB,MAAM,MAAA;AAAA,IACN,MAAM;AAAA,GACR;AACA,EAAA,OAAO,IAAA;AACT;AAEA,eAAe,WAAc,GAAA,EAAmC;AAC9D,EAAA,MAAM,eAAe,OAAA,CAAQ,IAAA;AAC7B,EAAA,OAAA,CAAQ,IAAA,IAAQ,CAAC,IAAA,KAAkB;AACjC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mCAAA,EAAsC,IAAA,IAAQ,CAAC,CAAA,iCAAA,CAAmC,CAAA;AAAA,EACpG,CAAA,CAAA;AACA,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,GAAA,EAAI;AAAA,EACnB,CAAA,SAAE;AACA,IAAA,OAAA,CAAQ,IAAA,GAAO,YAAA;AAAA,EACjB;AACF;;;ACxGO,IAAM,eAAA,GAAkB,CAAC,MAAA,EAAQ,KAAA,EAAO,YAAY,UAAU;AAwBrE,eAAsB,aAAA,CAAc;AAAA,EAClC,UAAA;AAAA,EACA;AACF,CAAA,EAG8B;AAC5B,EAAA,MAAM,MAAA,GAAS,aAAA,CAAc,UAAA,CAAW,SAAS,CAAA;AAGjD,EAAA,MAAM,WAAW,gBAAA,GAAmB,iBAAA,CAAkB,gBAAgB,CAAA,GAAI,aAAA,CAAc,WAAW,SAAS,CAAA;AAC5G,EAAA,MAAM,KAAA,GAAQ,mBAAA,CAAoB,QAAA,EAAU,UAAU,CAAA;AACtD,EAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,UAAA,EAAY,UAAA,CAAW,QAAQ,CAAC,CAAA;AAClE,EAAA,MAAM,GAAA,GAAM,MAAM,cAAA,CAAe,KAAA,CAAM,UAAU,QAAQ,CAAA;AAGzD,EAAA,MAAM,cAAc,oBAAA,CAAqB,MAAA,EAAQ,kBAAA,CAAmB,QAAA,EAAU,MAAM,CAAC,CAAA;AAErF,EAAA,MAAM,UAAA,GAAkC;AAAA,IACtC,GAAG,WAAA,CAAY,GAAA,CAAI,CAACpB,IAAAA,MAAS,EAAE,IAAA,EAAM,UAAA,EAAqB,GAAA,EAAAA,IAAAA,EAAI,CAAE,CAAA;AAAA,IAChE,GAAG,KAAA,CAAM,UAAA,CAAW,GAAA,CAAI,CAACA,IAAAA,MAAS,EAAE,IAAA,EAAM,MAAA,EAAiB,GAAA,EAAAA,IAAAA,EAAI,CAAE,CAAA;AAAA,IACjE,GAAG,GAAA,CAAI,GAAA,CAAI,CAACA,UAAS,EAAE,IAAA,EAAM,KAAA,EAAgB,GAAA,EAAKA,IAAAA,CAAI,OAAA,CAAQ,OAAA,EAAS,EAAE,GAAE,CAAE,CAAA;AAAA,IAC7E,GAAG,kBAAA,CAAmB,UAAU,CAAA,CAAE,GAAA,CAAI,CAACA,IAAAA,MAAS,EAAE,IAAA,EAAM,UAAA,EAAqB,GAAA,EAAAA,IAAAA,EAAI,CAAE,CAAA;AAAA;AAAA;AAAA;AAAA,IAInF,GAAG,mBAAA,CAAoB,UAAU,CAAA,CAAE,GAAA,CAAI,CAACA,IAAAA,MAAS,EAAE,IAAA,EAAM,UAAA,EAAqB,GAAA,EAAAA,IAAAA,EAAI,CAAE,CAAA;AAAA,IACpF,GAAG,wBAAA,CAAyB,UAAU,CAAA,CAAE,GAAA,CAAI,CAACA,IAAAA,MAAS,EAAE,IAAA,EAAM,UAAA,EAAqB,GAAA,EAAAA,IAAAA,EAAI,CAAE;AAAA,GAC3F;AACA,EAAA,OAAO,EAAE,SAAA,EAAW,UAAA,CAAW,SAAA,EAAW,MAAA,EAAQ,YAAY,QAAA,EAAS;AACzE;AAGO,IAAM,mBAAmB,CAAC,UAAA,KAC/B,aAAA,CAAc,EAAE,YAAY;AAE9B,IAAM,UAAA,GAAa,CAAC,QAAA,KACjB,QAAA,CAA6B,EAAA;ACnEzB,SAAS,WAAW,KAAA,EAAwB;AACjD,EAAA,IAAI,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AAC5E,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,KAAA,CAAM,GAAA,CAAI,UAAU,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AACpE,EAAA,MAAM,UAAU,MAAA,CAAO,OAAA,CAAQ,KAAgC,CAAA,CAC5D,MAAA,CAAO,CAAC,GAAG,UAAU,CAAA,KAAM,UAAA,KAAe,MAAS,CAAA,CACnD,IAAA,CAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA,KAAO,CAAA,GAAI,IAAI,EAAA,GAAK,CAAE,EACnC,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,UAAU,MAAM,CAAA,EAAG,IAAA,CAAK,UAAU,GAAG,CAAC,IAAI,UAAA,CAAW,UAAU,CAAC,CAAA,CAAE,CAAA;AAChF,EAAA,OAAO,CAAA,CAAA,EAAI,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAC9B;AAGA,SAAS,YAAY,KAAA,EAA2B;AAC9C,EAAA,IAAI,KAAA,IAAS,MAAM,OAAO,IAAA;AAC1B,EAAA,IAAI,KAAA,CAAM,QAAQ,KAAK,CAAA,SAAU,KAAA,CAAM,MAAA,KAAW,IAAI,IAAA,GAAQ,KAAA;AAC9D,EAAA,IAAI,OAAO,UAAU,QAAA,IAAY,MAAA,CAAO,KAAK,KAAK,CAAA,CAAE,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AACzE,EAAA,OAAO,KAAA;AACT;AAGA,SAAS,eAAe,KAAA,EAA6B;AACnD,EAAA,OAAO;AAAA,IACL,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,WAAA,EAAa,MAAM,WAAA,IAAe,IAAA;AAAA,IAClC,OAAA,EAAU,MAAM,OAAA,IAAW,IAAA;AAAA,IAC3B,MAAA,EAAQ,MAAM,MAAA,IAAU,IAAA;AAAA,IACxB,KAAA,EAAO,WAAA,CAAY,KAAA,CAAM,KAAK,CAAA;AAAA,IAC9B,OAAA,EAAS,WAAA,CAAY,KAAA,CAAM,OAAO,CAAA;AAAA,IAClC,QAAA,EAAU;AAAA,MACR,IAAA,EAAM,KAAA,CAAM,QAAA,EAAU,IAAA,EAAM,MAAA,IAAU,IAAA;AAAA,MACtC,KAAA,EAAO,KAAA,CAAM,QAAA,EAAU,KAAA,EAAO,MAAA,IAAU;AAAA,KAC1C;AAAA,IACA,OAAA,EAAS,WAAA;AAAA,MACP,MAAA,CAAO,WAAA;AAAA,QACL,MAAA,CAAO,OAAA,CAAQ,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,MAAM,CAAA,KAAM;AAAA,UAC1D,IAAA;AAAA,UACA;AAAA,YACE,WAAA,EAAa,OAAO,WAAA,IAAe,IAAA;AAAA,YACnC,QAAA,EAAU,MAAA,CAAO,QAAA,EAAU,MAAA,IAAU,IAAA;AAAA,YACrC,MAAA,EAAQ,WAAA,CAAY,MAAA,CAAO,MAAM,CAAA;AAAA,YACjC,SAAA,EAAW,YAAY,MAAA,CAAO,SAAA,EAAW,IAAI,CAAC,KAAA,KAAU,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,YACrE,UAAU,MAAA,CAAO,QAAA;AAAA,YACjB,OAAA,EAAS,WAAA,CAAY,MAAA,CAAO,OAAO,CAAA;AAAA,YACnC,KAAA,EAAQ,OAAO,KAAA,IAAS;AAAA;AAC1B,SACD;AAAA;AACH;AACF,GACF;AACF;AASA,SAAS,sBAAsB,YAAA,EAAgD;AAC7E,EAAA,MAAM,EAAE,WAAA,EAAa,YAAA,EAAc,QAAA,KAAa,YAAA,CAAa,KAAA;AAC7D,EAAA,MAAM,OAAA,GACJ,MAAA,CAAO,IAAA,CAAK,WAAW,EAAE,MAAA,KAAW,CAAA,IAAK,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,CAAE,MAAA,KAAW,CAAA,IAAK,YAAA,CAAa,KAAK,MAAA,KAAW,CAAA;AAC9G,EAAA,IAAI,SAAS,OAAO,IAAA;AAGpB,EAAA,OAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,aAAa,MAAA,CAAO,WAAA;AAAA,QAClB,MAAA,CAAO,QAAQ,WAAW,CAAA,CAAE,IAAI,CAAC,CAAC,GAAA,EAAK,GAAG,CAAA,KAAM;AAAA,UAC9C,GAAA;AAAA,UACA;AAAA,YACE,GAAI,IAAI,WAAA,KAAgB,MAAA,GAAY,EAAE,WAAA,EAAa,GAAA,CAAI,WAAA,EAAY,GAAI,EAAC;AAAA,YACxE,SAAS,GAAA,CAAI,OAAA;AAAA,YACb,UAAU,CAAC,GAAG,GAAA,CAAI,QAAQ,EAAE,IAAA,EAAK;AAAA,YACjC,QAAQ,CAAC,GAAG,GAAA,CAAI,MAAM,EAAE,IAAA;AAAK;AAC/B,SACD;AAAA,OACH;AAAA,MACA,cAAc,MAAA,CAAO,WAAA;AAAA,QACnB,MAAA,CAAO,QAAQ,QAAQ,CAAA,CAAE,IAAI,CAAC,CAAC,GAAA,EAAK,GAAG,CAAA,KAAM;AAAA,UAC3C,GAAA;AAAA,UACA,GAAA,CAAI,gBAAgB,MAAA,GAAY,EAAE,aAAa,GAAA,CAAI,WAAA,KAAgB;AAAC,SACrE;AAAA;AACH,KACF;AAAA,IACA,MAAM,CAAC,GAAG,YAAA,CAAa,IAAI,EAAE,IAAA;AAAK,GACpC;AACF;AAEO,SAAS,uBAAuB,UAAA,EAA4C;AACjF,EAAA,OAAO;AAAA,IACL,WAAW,UAAA,CAAW,SAAA;AAAA,IACtB,aAAa,UAAA,CAAW,WAAA;AAAA,IACxB,YAAA,EAAc,qBAAA,CAAsB,UAAA,CAAW,YAAY,CAAA;AAAA,IAC3D,MAAA,EAAQ,UAAA,CAAW,MAAA,CAAO,GAAA,CAAI,cAAc;AAAA,GAC9C;AACF;AAEO,SAAS,sBAAsB,UAAA,EAAyC;AAC7E,EAAA,OAAOqB,iBAAA,CAAW,QAAQ,CAAA,CACvB,MAAA,CAAO,WAAW,CAAA,CAClB,MAAA,CAAO,UAAA,CAAW,sBAAA,CAAuB,UAAU,CAAC,CAAC,CAAA,CACrD,OAAO,KAAK,CAAA;AACjB;ACzFO,IAAM,kBAAA,GAAqB,cAAA;AAElC,IAAM,mBAAA,GAAsBvB,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,GAAA,CAAI,EAAE,CAAA,CAAE,KAAA;AAAA,EACpD,kBAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,2BAAA,GAA8B,EAAA;AACpC,IAAM,4BAAA,GAA+B,GAAA;AAErC,IAAM,qCAAA,GAAwCA,MAAE,MAAA,CAAO;AAAA,EACrD,aAAaA,KAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,GAAG,EAAE,QAAA;AACnC,CAAC,CAAA;AAED,IAAM,0BAAA,GAA6BA,MAAE,MAAA,CAAO;AAAA,EAC1C,aAAaA,KAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,GAAG,EAAE,QAAA,EAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM1C,OAAA,EAASA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA;AAAA;AAAA,EAElC,UAAUA,KAAAA,CAAE,KAAA,CAAM,mBAAmB,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA;AAAA,EAEjD,QAAQA,KAAAA,CAAE,KAAA,CAAM,mBAAmB,CAAA,CAAE,OAAA,CAAQ,EAAE;AACjD,CAAC,CAAA;AAWM,IAAM,sBAAA,GAAyBA,MAAE,MAAA,CAAO;AAAA;AAAA,EAE7C,WAAA,EAAaA,MAAE,MAAA,CAAO,mBAAA,EAAqB,0BAA0B,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA;AAAA,EAEjF,YAAA,EAAcA,MAAE,MAAA,CAAO,mBAAA,EAAqB,qCAAqC,CAAA,CAAE,OAAA,CAAQ,EAAE;AAC/F,CAAC,CAAA,CAAE,WAAA,CAAY,CAAC,KAAA,EAAO,GAAA,KAAQ;AAC7B,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,WAAW,CAAA;AAC9C,EAAA,MAAM,iBAAiB,IAAI,GAAA,CAAI,OAAO,IAAA,CAAK,KAAA,CAAM,YAAY,CAAC,CAAA;AAE9D,EAAA,IAAI,QAAA,CAAS,SAAS,2BAAA,EAA6B;AACjD,IAAA,GAAA,CAAI,QAAA,CAAS;AAAA,MACX,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS,WAAW,2BAA2B,CAAA,6BAAA,CAAA;AAAA,MAC/C,IAAA,EAAM,CAAC,aAAa;AAAA,KACrB,CAAA;AAAA,EACH;AACA,EAAA,IAAI,cAAA,CAAe,OAAO,4BAAA,EAA8B;AACtD,IAAA,GAAA,CAAI,QAAA,CAAS;AAAA,MACX,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS,WAAW,4BAA4B,CAAA,yBAAA,CAAA;AAAA,MAChD,IAAA,EAAM,CAAC,cAAc;AAAA,KACtB,CAAA;AAAA,EACH;AAIA,EAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,IAAA,IAAI,cAAA,CAAe,GAAA,CAAI,GAAG,CAAA,EAAG;AAC3B,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,QAAQ,GAAG,CAAA,6CAAA,CAAA;AAAA,QACpB,IAAA,EAAM,CAAC,aAAA,EAAe,GAAG;AAAA,OAC1B,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,QAAQ,CAAA;AACnC,EAAA,KAAA,MAAW,CAAC,SAAS,UAAU,CAAA,IAAK,OAAO,OAAA,CAAQ,KAAA,CAAM,WAAW,CAAA,EAAG;AACrE,IAAA,MAAM,YAAA,uBAAmB,GAAA,EAAY;AACrC,IAAA,KAAA,MAAW,SAAA,IAAa,WAAW,QAAA,EAAU;AAC3C,MAAA,IAAI,YAAA,CAAa,GAAA,CAAI,SAAS,CAAA,EAAG;AAC/B,QAAA,GAAA,CAAI,QAAA,CAAS;AAAA,UACX,IAAA,EAAM,QAAA;AAAA,UACN,OAAA,EAAS,CAAA,MAAA,EAAS,OAAO,CAAA,SAAA,EAAY,SAAS,CAAA,4BAAA,CAAA;AAAA,UAC9C,IAAA,EAAM,CAAC,aAAA,EAAe,OAAA,EAAS,UAAU;AAAA,SAC1C,CAAA;AAAA,MACH;AACA,MAAA,YAAA,CAAa,IAAI,SAAS,CAAA;AAC1B,MAAA,IAAI,CAAC,UAAA,CAAW,GAAA,CAAI,SAAS,CAAA,EAAG;AAC9B,QAAA,GAAA,CAAI,QAAA,CAAS;AAAA,UACX,IAAA,EAAM,QAAA;AAAA,UACN,OAAA,EAAS,CAAA,MAAA,EAAS,OAAO,CAAA,yBAAA,EAA4B,SAAS,CAAA,CAAA,CAAA;AAAA,UAC9D,IAAA,EAAM,CAAC,aAAA,EAAe,OAAA,EAAS,UAAU;AAAA,SAC1C,CAAA;AAAA,MACH;AAAA,IACF;AACA,IAAA,MAAM,UAAA,uBAAiB,GAAA,EAAY;AACnC,IAAA,KAAA,MAAW,OAAA,IAAW,WAAW,MAAA,EAAQ;AACvC,MAAA,IAAI,UAAA,CAAW,GAAA,CAAI,OAAO,CAAA,EAAG;AAC3B,QAAA,GAAA,CAAI,QAAA,CAAS;AAAA,UACX,IAAA,EAAM,QAAA;AAAA,UACN,OAAA,EAAS,CAAA,MAAA,EAAS,OAAO,CAAA,SAAA,EAAY,OAAO,CAAA,0BAAA,CAAA;AAAA,UAC5C,IAAA,EAAM,CAAC,aAAA,EAAe,OAAA,EAAS,QAAQ;AAAA,SACxC,CAAA;AAAA,MACH;AACA,MAAA,UAAA,CAAW,IAAI,OAAO,CAAA;AACtB,MAAA,IAAI,CAAC,cAAA,CAAe,GAAA,CAAI,OAAO,CAAA,EAAG;AAChC,QAAA,GAAA,CAAI,QAAA,CAAS;AAAA,UACX,IAAA,EAAM,QAAA;AAAA,UACN,OAAA,EAAS,CAAA,MAAA,EAAS,OAAO,CAAA,6BAAA,EAAgC,OAAO,CAAA,CAAA,CAAA;AAAA,UAChE,IAAA,EAAM,CAAC,aAAA,EAAe,OAAA,EAAS,QAAQ;AAAA,SACxC,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAKA,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAiC;AACnD,EAAA,MAAM,KAAA,GAAQ,CAAC,GAAA,EAAa,IAAA,KAAoC;AAC9D,IAAA,IAAI,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA,KAAM,QAAQ,OAAO,IAAA;AACtC,IAAA,IAAI,KAAA,CAAM,IAAI,GAAG,CAAA,KAAM,YAAY,OAAO,CAAC,GAAG,IAAA,EAAM,GAAG,CAAA;AACvD,IAAA,KAAA,CAAM,GAAA,CAAI,KAAK,UAAU,CAAA;AACzB,IAAA,MAAM,UAAA,GAAa,KAAA,CAAM,WAAA,CAAY,GAAG,CAAA;AACxC,IAAA,KAAA,MAAW,SAAA,IAAa,UAAA,EAAY,QAAA,IAAY,EAAC,EAAG;AAClD,MAAA,IAAI,CAAC,UAAA,CAAW,GAAA,CAAI,SAAS,CAAA,EAAG;AAChC,MAAA,MAAM,QAAQ,KAAA,CAAM,SAAA,EAAW,CAAC,GAAG,IAAA,EAAM,GAAG,CAAC,CAAA;AAC7C,MAAA,IAAI,OAAO,OAAO,KAAA;AAAA,IACpB;AACA,IAAA,KAAA,CAAM,GAAA,CAAI,KAAK,MAAM,CAAA;AACrB,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AACA,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,OAAA,EAAS,EAAE,CAAA;AAC/B,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,CAAA,wBAAA,EAA2B,KAAA,CAAM,IAAA,CAAK,MAAM,CAAC,CAAA,CAAA;AAAA,QACtD,IAAA,EAAM,CAAC,aAAa;AAAA,OACrB,CAAA;AACD,MAAA;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAKM,SAAS,oBAAoB,KAAA,EAAqD;AACvF,EAAA,IAAI,CAAC,OAAO,OAAO,KAAA;AACnB,EAAA,OAAO,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,WAAW,CAAA,CAAE,MAAA,GAAS,CAAA,IAAK,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,YAAY,CAAA,CAAE,MAAA,GAAS,CAAA;AAC/F;AAWO,IAAM,wBAAA,GAA2B,wBAAA;AAExC,IAAM,mBAAA,GAAsB,GAAA;AAErB,IAAM,uBAAuBA,KAAAA,CACjC,KAAA;AAAA,EACCA,KAAAA,CAAE,QAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,EAAE,CAAA,CAAE,KAAA;AAAA,IACxB,wBAAA;AAAA,IACA;AAAA;AAEJ,CAAA,CACC,GAAA,CAAI,mBAAmB,CAAA,CACvB,OAAA,CAAQ,EAAE;AAQN,SAAS,mBAAmB,GAAA,EAAkC;AACnE,EAAA,OAAO,IAAI,UAAA,CAAW,MAAM,IACxB,EAAE,KAAA,EAAO,OAAO,GAAA,EAAK,GAAA,CAAI,KAAA,CAAM,MAAA,CAAO,MAAM,CAAA,EAAE,GAC9C,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAK,GAAA,EAAI;AAChC;AAOO,SAAS,sBAAA,CAAuB;AAAA,EACrC,IAAA;AAAA,EACA;AACF,CAAA,EAGa;AACX,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAI,MAAA,CAAO,KAAK,KAAA,EAAO,WAAA,IAAe,EAAE,CAAC,CAAA;AAC9D,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,IAAI,IAAA,CAAK,IAAI,GAAG,CAAA,SAAU,IAAA,CAAK,CAAA,KAAA,EAAQ,GAAG,CAAA,0BAAA,CAA4B,CAAA;AACtE,IAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AACZ,IAAA,MAAM,MAAA,GAAS,mBAAmB,GAAG,CAAA;AACrC,IAAA,IAAI,OAAO,KAAA,KAAU,MAAA,IAAU,SAAS,GAAA,CAAI,MAAA,CAAO,GAAG,CAAA,EAAG;AACvD,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,KAAA,EAAQ,GAAG,CAAA,iDAAA,CAA8C,CAAA;AAAA,IACvE;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;;;AC7MA,IAAM,kBAAA,GAA4C,EAAE,KAAA,EAAO,EAAE,WAAA,EAAa,EAAC,EAAG,YAAA,EAAc,EAAC,EAAE,EAAG,IAAA,EAAM,EAAC,EAAE;AAGpG,SAAS,uBAAuB,YAAA,EAAkD;AACvF,EAAA,uBAAO,IAAI,GAAA,CAAY,CAAC,GAAG,MAAA,CAAO,IAAA,CAAK,YAAA,CAAa,KAAA,CAAM,YAAY,CAAA,EAAG,GAAG,YAAA,CAAa,IAAI,CAAC,CAAA;AAChG;AAOO,SAAS,wBAAA,CACd,OACA,MAAA,EACqB;AACrB,EAAA,IAAI,MAAM,MAAA,KAAW,CAAA,EAAG,MAAM,IAAI,mBAAmB,4BAA4B,CAAA;AAEjF,EAAA,MAAM,SAAA,GAAa,KAAA,CAAM,CAAC,CAAA,CAAqB,KAAA,CAAM,SAAA;AACrD,EAAA,IAAI,MAAA,IAAU,MAAA,CAAO,SAAA,KAAc,SAAA,EAAW;AAC5C,IAAA,MAAM,IAAI,mBAAmB,CAAA,WAAA,EAAc,MAAA,CAAO,SAAS,CAAA,kBAAA,EAAqB,SAAS,KAAK,gBAAgB,CAAA;AAAA,EAChH;AACA,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,KAAA,EAAM,IAAK,KAAA,EAAO;AACnC,IAAA,IAAI,KAAA,CAAM,cAAc,SAAA,EAAW;AACjC,MAAA,MAAM,IAAI,mBAAmB,CAAA,WAAA,EAAc,KAAA,CAAM,SAAS,CAAA,kBAAA,EAAqB,SAAS,KAAK,IAAI,CAAA;AAAA,IACnG;AAAA,EACF;AAEA,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAoB;AACrC,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,KAAA,EAAM,IAAK,KAAA,EAAO;AACnC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA;AACrC,IAAA,IAAI,QAAA,EAAU,MAAM,IAAI,kBAAA,CAAmB,CAAA,OAAA,EAAU,MAAM,KAAK,CAAA,wBAAA,EAA2B,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAA;AAC3G,IAAA,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,KAAA,EAAO,IAAI,CAAA;AAAA,EAC5B;AAIA,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAAoB;AAC5C,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,KAAA,EAAM,IAAK,KAAA,EAAO;AACnC,IAAA,KAAA,MAAW,QAAQ,MAAA,CAAO,IAAA,CAAK,MAAM,OAAA,IAAW,EAAE,CAAA,EAAG;AACnD,MAAA,MAAM,QAAA,GAAW,WAAA,CAAY,GAAA,CAAI,IAAI,CAAA;AACrC,MAAA,IAAI,QAAA,QAAgB,IAAI,kBAAA,CAAmB,WAAW,IAAI,CAAA,wBAAA,EAA2B,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAA;AACrG,MAAA,WAAA,CAAY,GAAA,CAAI,MAAM,IAAI,CAAA;AAAA,IAC5B;AAAA,EACF;AAEA,EAAA,MAAM,eAAsC,MAAA,EAAQ,YAAA,GAChD,EAAE,KAAA,EAAO,OAAO,YAAA,CAAa,KAAA,IAAS,kBAAA,CAAmB,KAAA,EAAO,MAAM,MAAA,CAAO,YAAA,CAAa,IAAA,IAAQ,IAAG,GACrG,kBAAA;AACJ,EAAA,MAAM,SAAA,GAAY,uBAAuB,EAAE,IAAA,EAAM,aAAa,IAAA,EAAM,KAAA,EAAO,YAAA,CAAa,KAAA,EAAO,CAAA;AAC/F,EAAA,IAAI,SAAA,CAAU,MAAA,GAAS,CAAA,EAAG,MAAM,IAAI,mBAAmB,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA,EAAG,gBAAgB,CAAA;AAC7F,EAAA,MAAM,SAAS,KAAA,CAAM,GAAA,CAAI,CAAC,EAAE,KAAA,OAAY,KAAK,CAAA,CAAE,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM,CAAA,CAAE,MAAM,aAAA,CAAc,CAAA,CAAE,KAAK,CAAC,CAAA;AAC5F,EAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,CAAC,KAAA,CAAM,KAAA,EAAO,KAAK,CAAC,CAAC,CAAA;AAClE,EAAA,kBAAA,CAAmB,OAAO,MAAM,CAAA;AAChC,EAAA,uBAAA,CAAwB,OAAO,MAAM,CAAA;AACrC,EAAA,kBAAA,CAAmB,KAAK,CAAA;AACxB,EAAA,sBAAA,CAAuB,KAAA,EAAO,sBAAA,CAAuB,YAAY,CAAC,CAAA;AAClE,EAAA,OAAO,EAAE,SAAA,EAAW,WAAA,EAAa,QAAQ,WAAA,IAAe,IAAA,EAAM,cAAc,MAAA,EAAO;AACrF;AAQA,SAAS,uBAAA,CAAwB,OAAkC,MAAA,EAA8C;AAC/G,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,KAAA,EAAM,IAAK,KAAA,EAAO;AACnC,IAAA,KAAA,MAAW,CAAC,UAAA,EAAY,MAAM,CAAA,IAAK,MAAA,CAAO,QAAQ,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA,EAAG;AACtE,MAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,SAAA,IAAa,EAAC,EAAG;AAC1C,QAAA,IAAI,KAAA,CAAM,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,EAAG;AAC/B,QAAA,MAAM,MAAA,GAAS,MAAA,CAAO,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA;AACrC,QAAA,IAAI,CAAC,MAAA,EAAQ;AACX,UAAA,MAAM,IAAI,mBAAmB,CAAA,QAAA,EAAW,UAAU,sCAAsC,KAAA,CAAM,KAAK,KAAK,IAAI,CAAA;AAAA,QAC9G;AACA,QAAA,IAAI,OAAO,MAAA,EAAQ;AAIjB,UAAA,MAAM,IAAI,kBAAA;AAAA,YACR,CAAA,QAAA,EAAW,UAAU,CAAA,kCAAA,EAAqC,KAAA,CAAM,KAAK,CAAA,iDAAA,CAAA;AAAA,YACrE;AAAA,WACF;AAAA,QACF;AACA,QAAA,MAAM,SAAA,GAAY,MAAA,CAAO,MAAA,GAAS,KAAA,CAAM,KAAK,CAAA,EAAG,IAAA;AAChD,QAAA,MAAM,gBAAA,GAAmB,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,OAAA,IAAW,EAAE,CAAA,CAAE,IAAA,CAAK,CAAC,MAAA,KAAW,MAAA,CAAO,WAAW,CAAA;AAChG,QAAA,IAAI,SAAA,IAAa,oBAAoB,eAAA,CAAgB,SAAS,MAAM,eAAA,CAAgB,gBAAA,CAAiB,IAAI,CAAA,EAAG;AAC1G,UAAA,MAAM,IAAI,kBAAA;AAAA,YACR,CAAA,QAAA,EAAW,UAAU,CAAA,aAAA,EAAgB,KAAA,CAAM,KAAK,CAAA,GAAA,EAAM,SAAS,CAAA,WAAA,EAAc,KAAA,CAAM,KAAK,CAAA,uBAAA,EAA0B,gBAAA,CAAiB,IAAI,CAAA,CAAA;AAAA,YACvI;AAAA,WACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAOA,SAAS,mBAAmB,KAAA,EAAwC;AAKlE,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAoB;AACrC,EAAA,MAAM,KAAA,GAAQ,CAAC,IAAA,EAAc,KAAA,EAAe,IAAA,KAAiB;AAC3D,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA;AAC9B,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAM,IAAI,mBAAmB,CAAA,eAAA,EAAkB,IAAI,MAAM,KAAK,CAAA,gBAAA,EAAmB,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAA;AAAA,IACnG;AACA,IAAA,IAAA,CAAK,IAAI,IAAA,EAAM,CAAA,EAAG,KAAK,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,EACrC,CAAA;AAEA,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,KAAA,EAAM,IAAK,KAAA,EAAO;AACnC,IAAA,KAAA,CAAM,MAAM,KAAA,EAAO,CAAA,OAAA,EAAU,KAAA,CAAM,KAAK,KAAK,IAAI,CAAA;AAAA,EACnD;AACA,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,KAAA,EAAM,IAAK,KAAA,EAAO;AACnC,IAAA,IAAI,MAAM,MAAA,EAAQ;AAClB,IAAA,KAAA,CAAM,CAAA,EAAG,MAAM,KAAK,CAAA,KAAA,CAAA,EAAS,kCAAkC,KAAA,CAAM,KAAK,KAAK,IAAI,CAAA;AACnF,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,MAAM,CAAA,IAAK,MAAA,CAAO,QAAQ,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA,EAAG;AAChE,MAAA,IAAI,MAAA,CAAO,MAAA,IAAU,CAAC,MAAA,CAAO,WAAA,EAAa;AACxC,QAAA,KAAA,CAAM,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,OAAA,CAAA,EAAW,CAAA,+BAAA,EAAkC,KAAA,CAAM,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,CAAA,EAAK,IAAI,CAAA;AAAA,MACvG;AAAA,IACF;AAAA,EACF;AACA,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,KAAA,EAAM,IAAK,KAAA,EAAO;AACnC,IAAA,KAAA,MAAW,UAAA,IAAc,KAAA,CAAM,OAAA,IAAW,EAAC,EAAG;AAC5C,MAAA,KAAA,CAAM,SAAA,CAAU,MAAM,KAAA,EAAO,UAAU,GAAG,CAAA,UAAA,EAAa,KAAA,CAAM,KAAK,CAAA,CAAA,CAAA,EAAK,IAAI,CAAA;AAAA,IAC7E;AAAA,EACF;AACF;AAEA,SAAS,kBAAA,CAAmB,OAAkC,MAAA,EAA8C;AAC1G,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,KAAA,EAAM,IAAK,KAAA,EAAO;AACnC,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,MAAA,CAAO,QAAQ,KAAA,CAAM,KAAA,IAAS,EAAE,CAAA,EAAG;AAC5D,MAAA,IAAI,oBAAA,CAAqB,IAAA,CAAK,EAAE,CAAA,EAAG;AACnC,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA;AACjC,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAM,IAAI,mBAAmB,CAAA,MAAA,EAAS,IAAI,+BAA+B,IAAA,CAAK,EAAE,KAAK,IAAI,CAAA;AAAA,MAC3F;AACA,MAAA,IAAI,IAAA,CAAK,OAAA,IAAW,MAAA,CAAO,MAAA,EAAQ;AACjC,QAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,MAAA,EAAS,IAAI,sDAAsD,IAAI,CAAA;AAAA,MACtG;AAMA,MAAA,MAAM,UAAA,GAAa,KAAA,CAAM,OAAA,GAAU,IAAA,CAAK,EAAE,CAAA,EAAG,IAAA;AAC7C,MAAA,MAAM,gBAAA,GAAmB,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,OAAA,IAAW,EAAE,CAAA,CAAE,IAAA,CAAK,CAAC,MAAA,KAAW,MAAA,CAAO,WAAW,CAAA;AAChG,MAAA,IAAI,UAAA,IAAc,oBAAoB,eAAA,CAAgB,UAAU,MAAM,eAAA,CAAgB,gBAAA,CAAiB,IAAI,CAAA,EAAG;AAC5G,QAAA,MAAM,IAAI,kBAAA;AAAA,UACR,CAAA,MAAA,EAAS,IAAI,CAAA,mBAAA,EAAsB,IAAA,CAAK,EAAE,CAAA,KAAA,EAAQ,UAAU,CAAA,MAAA,EAAS,IAAA,CAAK,EAAE,CAAA,QAAA,EAAW,gBAAA,CAAiB,IAAI,CAAA,YAAA,CAAA;AAAA,UAC5G;AAAA,SACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AASA,SAAS,sBAAA,CAAuB,OAAkC,QAAA,EAAqC;AACrG,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,KAAA,EAAM,IAAK,KAAA,EAAO;AACnC,IAAA,MAAM,UAAA,GAAa;AAAA,MACjB,GAAI,KAAA,CAAM,QAAA,EAAU,IAAA,GAAO,sBAAA,CAAuB,MAAM,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,GAAI,EAAC;AAAA,MAC9E,GAAI,KAAA,CAAM,QAAA,EAAU,KAAA,GAAQ,sBAAA,CAAuB,MAAM,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,GAAI,EAAC;AAAA,MAChF,GAAG,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA,CAAE,OAAA,CAAQ,CAAC,MAAA,KAAW;AAAA,QACxD,GAAI,OAAO,QAAA,GAAW,sBAAA,CAAuB,OAAO,QAAA,CAAS,GAAG,IAAI,EAAC;AAAA,QACrE,GAAG,8BAA8B,MAAM;AAAA,OACxC;AAAA,KACH;AACA,IAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,MAAA,IAAI,CAAC,QAAA,CAAS,GAAA,CAAI,GAAG,CAAA,EAAG;AACtB,QAAA,MAAM,IAAI,kBAAA;AAAA,UACR,eAAe,GAAG,CAAA,6GAAA,CAAA;AAAA,UAClB;AAAA,SACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;ACrMO,IAAM,qBAAA,GAAwBA,MAAE,YAAA,CAAa;AAAA,EAClD,SAAA,EAAW,eAAA;AAAA,EACX,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,YAAA,EAAcA,MACX,YAAA,CAAa;AAAA,IACZ,KAAA,EAAO,uBAAuB,QAAA,EAAS;AAAA,IACvC,IAAA,EAAM,qBAAqB,QAAA;AAAS,GACrC,EACA,QAAA;AACL,CAAC;;;ACNM,SAAS,cAAA,CAAe,MAAc,QAAA,EAAkC;AAC7E,EAAA,MAAM,SAAS,eAAA,CAAgB,SAAA,CAAU,SAAA,CAAU,IAAA,EAAM,QAAQ,CAAC,CAAA;AAClE,EAAA,IAAI,CAAC,MAAA,CAAO,OAAA,EAAS,MAAM,IAAI,mBAAmB,YAAA,CAAa,MAAA,CAAO,KAAK,CAAA,EAAG,IAAI,CAAA;AAClF,EAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,MAAA,CAAO,IAAA,EAAK;AACpC;AAYO,SAAS,uBAAuB,OAAA,EAA2D;AAChG,EAAA,IAAI,MAAA;AACJ,EAAA,MAAM,SAA2B,EAAC;AAClC,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,IAAA,IAAI,0BAAA,CAA2B,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA,EAAG;AAC/C,MAAA,IAAI,QAAQ,MAAM,IAAI,kBAAA,CAAmB,iCAAA,EAAmC,OAAO,IAAI,CAAA;AACvF,MAAA,MAAM,MAAA,GAAS,sBAAsB,SAAA,CAAU,SAAA,CAAU,OAAO,IAAA,EAAM,MAAA,CAAO,QAAQ,CAAC,CAAA;AACtF,MAAA,IAAI,CAAC,MAAA,CAAO,OAAA,EAAS,MAAM,IAAI,kBAAA,CAAmB,YAAA,CAAa,MAAA,CAAO,KAAK,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA;AACzF,MAAA,MAAA,GAAS,MAAA,CAAO,IAAA;AAChB,MAAA;AAAA,IACF;AACA,IAAA,MAAA,CAAO,KAAK,cAAA,CAAe,MAAA,CAAO,IAAA,EAAM,MAAA,CAAO,QAAQ,CAAC,CAAA;AAAA,EAC1D;AACA,EAAA,OAAO,wBAAA,CAAyB,QAAQ,MAAM,CAAA;AAChD;AAEA,eAAsB,wBAAwB,GAAA,EAAuC;AACnF,EAAA,MAAM,KAAA,GAAQ,MAAM,mBAAA,CAAoB,GAAG,CAAA;AAC3C,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,MAAM,IAAI,kBAAA,CAAmB,CAAA,GAAA,EAAM,0BAAA,CAA2B,IAAA,CAAK,GAAG,CAAC,CAAA,UAAA,EAAa,GAAG,CAAA,CAAE,CAAA;AAEjH,EAAA,MAAM,UAA8B,EAAC;AACrC,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,WAAW,MAAMwB,iBAAA,CAASC,UAAK,GAAA,EAAK,IAAI,GAAG,MAAM,CAAA;AACvD,IAAA,IAAI,MAAA,CAAO,UAAA,CAAW,QAAA,EAAU,MAAM,IAAI,yBAAA,EAA2B;AACnE,MAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,4CAAA,EAA+C,yBAAyB,UAAU,IAAI,CAAA;AAAA,IACrH;AACA,IAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,IAAA,EAAM,IAAA,EAAM,UAAU,CAAA;AAAA,EACvC;AAEA,EAAA,MAAM,UAAA,GAAa,uBAAuB,OAAO,CAAA;AACjD,EAAA,OAAO,EAAE,UAAA,EAAY,WAAA,EAAa,qBAAA,CAAsB,UAAU,GAAG,KAAA,EAAM;AAC7E;AAEA,SAAS,SAAA,CAAU,MAAc,QAAA,EAA2B;AAC1D,EAAA,IAAI;AACF,IAAA,OAAOC,YAAS,QAAQ,CAAA;AAAA,EAC1B,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,IAAI,kBAAA,CAAmB,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,gBAAgB,IAAI,CAAA;AAAA,EAC5F;AACF;AAEA,IAAM,gBAAA,GAAmB,CAAC,IAAA,KACxB,0BAAA,CAA2B,IAAA,CAAK,CAAC,SAAA,KAAcC,YAAA,CAAQ,IAAI,CAAA,KAAM,SAAS,CAAA;AAE5E,eAAe,oBAAoB,GAAA,EAAgC;AACjE,EAAA,MAAM,UAAU,MAAMC,gBAAA,CAAQ,KAAK,EAAE,aAAA,EAAe,MAAM,CAAA;AAC1D,EAAA,OAAO,QACJ,MAAA,CAAO,CAAC,UAAU,KAAA,CAAM,MAAA,MAAY,gBAAA,CAAiB,KAAA,CAAM,IAAI,CAAC,EAChE,GAAA,CAAI,CAAC,UAAU,KAAA,CAAM,IAAI,EACzB,IAAA,EAAK;AACV;AAEA,SAAS,aAAa,KAAA,EAA2B;AAC/C,EAAA,OAAO,KAAA,CAAM,OACV,GAAA,CAAI,CAAC,UAAW,KAAA,CAAM,IAAA,CAAK,MAAA,GAAS,CAAA,GAAI,CAAA,EAAG,KAAA,CAAM,KAAK,IAAA,CAAK,GAAG,CAAC,CAAA,EAAA,EAAK,KAAA,CAAM,OAAO,KAAK,KAAA,CAAM,OAAQ,CAAA,CACpG,IAAA,CAAK,IAAI,CAAA;AACd;;;ACrFA,IAAM,WAAA,GAAc,qEAAA;AAUpB,IAAM,KAAA,GAA4D;AAAA,EAChE,EAAE,OAAA,EAAS,sBAAA,EAAwB,MAAA,EAAQ,iDAAA,EAAkD;AAAA,EAC7F,EAAE,OAAA,EAAS,qBAAA,EAAuB,MAAA,EAAQ,mCAAA,EAAoC;AAAA,EAC9E,EAAE,OAAA,EAAS,iBAAA,EAAmB,MAAA,EAAQ,mBAAA,EAAoB;AAAA,EAC1D,EAAE,OAAA,EAAS,oBAAA,EAAsB,MAAA,EAAQ,6BAAA,EAA8B;AAAA,EACvE;AAAA,IACE,OAAA,EAAS,WAAA;AAAA,IACT,MAAA,EAAQ;AAAA;AAEZ,CAAA;AAEO,SAAS,oBAAoB,UAAA,EAAkE;AACpG,EAAA,MAAM,UAAkC,EAAC;AACzC,EAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,IAAA,IAAI,SAAA,CAAU,SAAS,KAAA,EAAO;AAC5B,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,CAAC,EAAE,OAAA,EAAQ,KAAM,OAAA,CAAQ,IAAA,CAAK,SAAA,CAAU,GAAG,CAAC,CAAA;AACpE,MAAA,IAAI,IAAA,EAAM,OAAA,CAAQ,IAAA,CAAK,EAAE,GAAA,EAAK,UAAU,GAAA,EAAK,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAQ,CAAA;AAAA,IACpE,CAAA,MAAA,IAAW,UAAU,IAAA,KAAS,MAAA,IAAU,YAAY,IAAA,CAAK,SAAA,CAAU,GAAG,CAAA,EAAG;AACvE,MAAA,OAAA,CAAQ,KAAK,EAAE,GAAA,EAAK,UAAU,GAAA,EAAK,MAAA,EAAQ,qHAAgH,CAAA;AAAA,IAC7J;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;ACrBO,IAAM,kBAAA,GAAqB;AAClC,IAAM,YAAA,GAAe,MAAA;AACrB,IAAM,gBAAA,GAAmB,cAAA;AAEzB,IAAM,kBAAA,GAAqB5B,MAAE,MAAA,CAAO;AAAA,EAClC,SAASA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA,EAAS;AAAA,EACnC,IAAA,EAAMA,KAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACtB,YAAA,EAAcA,KAAAA,CAAE,MAAA,EAAO,CAAE,OAAO,EAAE,CAAA;AAAA;AAAA,EAElC,uBAAuBA,KAAAA,CAAE,MAAA,GAAS,MAAA,CAAO,EAAE,EAAE,QAAA,EAAS;AAAA,EACtD,QAAA,EAAUA,KAAAA,CAAE,MAAA,EAAO,CAAE,OAAO,EAAE,CAAA;AAAA;AAAA,EAE9B,iBAAA,EAAmBA,KAAAA,CAAE,MAAA,EAAO,CAAE,OAAO,EAAE,CAAA;AAAA,EACvC,WAAA,EAAaA,MAAE,OAAA;AACjB,CAAC,CAAA;AAED,IAAM,aAAA,GAAgBA,MAAE,MAAA,CAAO;AAAA,EAC7B,OAAA,EAASA,KAAAA,CAAE,OAAA,CAAQ,CAAC,CAAA;AAAA,EACpB,SAAA,EAAWA,KAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAC3B,OAAA,EAASA,KAAAA,CAAE,KAAA,CAAM,kBAAkB;AACrC,CAAC,CAAA;AAWM,IAAM,YAAA,GAAe,CAAC,SAAA,MAAyC,EAAE,SAAS,CAAA,EAAG,SAAA,EAAW,OAAA,EAAS,EAAC,EAAE;AAE3G,eAAsB,sBAAA,CAAuB,KAAa,SAAA,EAAgD;AACxG,EAAA,MAAM,WAAA,GAAcyB,SAAAA,CAAK,GAAA,EAAK,kBAAA,EAAoB,cAAc,gBAAgB,CAAA;AAChF,EAAA,MAAM,GAAA,GAAM,MAAMD,iBAAAA,CAAS,WAAA,EAAa,MAAM,CAAA,CAAE,KAAA,CAAM,MAAM,IAAI,CAAA;AAChE,EAAA,IAAI,GAAA,KAAQ,MAAM,OAAO,EAAE,SAAS,YAAA,CAAa,SAAS,CAAA,EAAG,WAAA,EAAa,MAAA,EAAU;AAEpF,EAAA,MAAM,SAAS,aAAA,CAAc,SAAA,CAAU,SAAA,CAAU,WAAA,EAAa,GAAG,CAAC,CAAA;AAClE,EAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,IAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,2BAAA,EAA8B,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,EAAG,OAAA,IAAW,YAAY,CAAA,CAAA,EAAI,WAAW,CAAA;AAAA,EAC3H;AACA,EAAA,IAAI,MAAA,CAAO,IAAA,CAAK,SAAA,KAAc,SAAA,EAAW;AACvC,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,wCAAA,EAA2C,MAAA,CAAO,IAAA,CAAK,SAAS,uBAAuB,SAAS,CAAA,CAAA,CAAA;AAAA,MAChG;AAAA,KACF;AAAA,EACF;AACA,EAAA,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,CAAC,OAAOvB,MAAAA,KAAU;AAC5C,IAAA,IAAI,KAAA,CAAM,OAAA,KAAYA,MAAAA,GAAQ,CAAA,EAAG;AAC/B,MAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,2DAAA,EAA8D,KAAA,CAAM,IAAI,KAAK,WAAW,CAAA;AAAA,IACvH;AAAA,EACF,CAAC,CAAA;AAED,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,GAAG,EAAE,CAAA;AACrC,EAAA,OAAO,EAAE,OAAA,EAAS,MAAA,CAAO,IAAA,EAAM,WAAA,EAAa,GAAA,GAAM,MAAM,YAAA,CAAa,GAAA,EAAK,GAAA,CAAI,OAAO,CAAA,GAAI,MAAA,EAAU;AACrG;AAEA,eAAsB,gBAAA,CAAiB,KAAa,OAAA,EAAkC;AACpF,EAAA,MAAM4B,MAAA,GAAOJ,UAAK,GAAA,EAAK,kBAAA,EAAoB,cAAc,CAAA,EAAG,GAAA,CAAI,OAAO,CAAC,CAAA,cAAA,CAAgB,CAAA;AACxF,EAAA,OAAOD,iBAAAA,CAASK,MAAA,EAAM,MAAM,CAAA,CAAE,MAAM,MAAM;AACxC,IAAA,MAAM,IAAI,kBAAA,CAAmB,4BAAA,EAA8BA,MAAI,CAAA;AAAA,EACjE,CAAC,CAAA;AACH;AAEA,eAAsB,YAAA,CAAa,KAAa,OAAA,EAA6C;AAC3F,EAAA,MAAMA,MAAA,GAAOJ,UAAK,GAAA,EAAK,kBAAA,EAAoB,cAAc,CAAA,EAAG,GAAA,CAAI,OAAO,CAAC,CAAA,cAAA,CAAgB,CAAA;AACxF,EAAA,OAAO,UAAUI,MAAA,EAAM,MAAM,gBAAA,CAAiB,GAAA,EAAK,OAAO,CAAC,CAAA;AAC7D;AAEA,eAAsB,gBAAA,CAAiB,KAAa,KAAA,EAAsC;AACxF,EAAA,MAAMA,SAAOJ,SAAAA,CAAK,GAAA,EAAK,oBAAoB,CAAA,EAAG,KAAA,CAAM,IAAI,CAAA,IAAA,CAAM,CAAA;AAC9D,EAAA,OAAOD,iBAAAA,CAASK,MAAA,EAAM,MAAM,CAAA,CAAE,MAAM,MAAM;AACxC,IAAA,MAAM,IAAI,kBAAA,CAAmB,wBAAA,EAA0BA,MAAI,CAAA;AAAA,EAC7D,CAAC,CAAA;AACH;AAEO,IAAM,UAAA,GAAa,CAACvB,KAAAA,KAAyBiB,iBAAAA,CAAW,QAAQ,EAAE,MAAA,CAAOjB,KAAI,CAAA,CAAE,MAAA,CAAO,KAAK;AAE3F,IAAM,aAAA,GAAgB,CAAC,OAAA,EAAiB,WAAA,KAAgC,CAAA,EAAG,GAAA,CAAI,OAAO,CAAC,CAAA,CAAA,EAAI,WAAA,CAAY,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA;AAEnH,SAAS,kBAAA,CAAmB;AAAA,EACjC,IAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,EAKW;AACT,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,MAAM,IAAI,CAAA,CAAA;AAAA,IACV,iBAAiB,SAAS,CAAA,CAAA;AAAA,IAC1B,oBAAoB,WAAW,CAAA,CAAA;AAAA,IAC/B;AAAA,GACF,CAAE,KAAK,IAAI,CAAA;AACX,EAAA,OAAO,CAAC,MAAA,EAAQ,GAAG,IAAA,CAAK,UAAA,CAAW,IAAI,CAAC,SAAA,KAAc,CAAA,EAAG,SAAA,CAAU,GAAG,CAAA,CAAA,CAAG,CAAC,CAAA,CAAE,IAAA,CAAK,MAAM,CAAA,GAAI,IAAA;AAC7F;AAQA,eAAsB,cAAA,CAAe;AAAA,EACnC,GAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,EAM8B;AAC5B,EAAA,MAAM,GAAA,GAAM,SAAA,CAAU,OAAA,CAAQ,OAAA,CAAQ,GAAG,EAAE,CAAA;AAC3C,EAAA,MAAM,OAAA,GAAA,CAAW,GAAA,EAAK,OAAA,IAAW,CAAA,IAAK,CAAA;AACtC,EAAA,MAAM,IAAA,GAAO,aAAA,CAAc,OAAA,EAAS,WAAW,CAAA;AAC/C,EAAA,MAAMJ,IAAAA,GAAM,kBAAA,CAAmB,EAAE,IAAA,EAAM,SAAA,EAAW,UAAU,OAAA,CAAQ,SAAA,EAAW,WAAA,EAAa,IAAA,EAAM,CAAA;AAElG,EAAA,MAAM,OAAA,GAAUuB,SAAAA,CAAK,GAAA,EAAK,kBAAA,EAAoB,YAAY,CAAA;AAC1D,EAAA,MAAMK,cAAA,CAAM,OAAA,EAAS,EAAE,SAAA,EAAW,MAAM,CAAA;AACxC,EAAA,MAAM,YAAA,GAAe,GAAG,IAAA,CAAK,SAAA,CAAU,KAAK,QAAA,EAAU,IAAA,EAAM,CAAC,CAAC;AAAA,CAAA;AAC9D,EAAA,MAAMC,kBAAA,CAAUN,UAAK,GAAA,EAAK,kBAAA,EAAoB,GAAG,IAAI,CAAA,IAAA,CAAM,GAAGvB,IAAG,CAAA;AACjE,EAAA,MAAM6B,kBAAA,CAAUN,UAAK,OAAA,EAAS,CAAA,EAAG,IAAI,OAAO,CAAC,CAAA,cAAA,CAAgB,CAAA,EAAG,YAAY,CAAA;AAE5E,EAAA,MAAM,OAAA,GAA4B;AAAA,IAChC,GAAG,SAAA,CAAU,OAAA;AAAA,IACb,OAAA,EAAS;AAAA,MACP,GAAG,UAAU,OAAA,CAAQ,OAAA;AAAA,MACrB;AAAA,QACE,OAAA;AAAA,QACA,IAAA;AAAA,QACA,YAAA,EAAc,WAAA;AAAA,QACd,qBAAA,EAAuB,KAAK,YAAA,IAAgB,IAAA;AAAA,QAC5C,QAAA,EAAU,WAAWvB,IAAG,CAAA;AAAA,QACxB,iBAAA,EAAmB,WAAW,YAAY,CAAA;AAAA,QAC1C;AAAA;AACF;AACF,GACF;AACA,EAAA,MAAM6B,kBAAA,CAAUN,SAAAA,CAAK,OAAA,EAAS,gBAAgB,CAAA,EAAG,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,OAAA,EAAS,IAAA,EAAM,CAAC,CAAC;AAAA,CAAI,CAAA;AACxF,EAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,WAAA,EAAY;AACtC;AAEA,IAAM,GAAA,GAAM,CAAC,OAAA,KAA4B,MAAA,CAAO,OAAO,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAExE,SAAS,SAAA,CAAU,MAAc,GAAA,EAAsB;AACrD,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,EACvB,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,IAAI,kBAAA,CAAmB,gBAAA,EAAkB,IAAI,CAAA;AAAA,EACrD;AACF;;;ACjJA,eAAsB,yBAAA,CACpB,KACA,MAAA,EACoC;AACpC,EAAA,MAAM,YAAY,MAAM,sBAAA,CAAuB,GAAA,EAAK,MAAA,CAAO,WAAW,SAAS,CAAA;AAC/E,EAAA,MAAM,GAAA,GAAM,SAAA,CAAU,OAAA,CAAQ,OAAA,CAAQ,GAAG,EAAE,CAAA;AAC3C,EAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AAEjB,EAAA,IAAI,GAAA,CAAI,YAAA,KAAiB,MAAA,CAAO,WAAA,EAAa;AAC3C,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,0BAAA,EAA6B,IAAI,IAAI,CAAA,gEAAA,CAAA;AAAA,MACrC,GAAG,kBAAkB,CAAA,kBAAA;AAAA,KACvB;AAAA,EACF;AAEA,EAAA,MAAM,gBAAA,GAAmB,GAAA,CAAI,OAAA,GAAU,CAAA,GAAI,MAAM,aAAa,GAAA,EAAK,GAAA,CAAI,OAAA,GAAU,CAAC,CAAA,GAAI,MAAA;AACtF,EAAA,MAAM,IAAA,GAAO,MAAM,aAAA,CAAc,EAAE,YAAY,MAAA,CAAO,UAAA,EAAY,kBAAkB,CAAA;AACpF,EAAA,MAAM,cAAc,kBAAA,CAAmB;AAAA,IACrC,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,SAAA,EAAW,OAAO,UAAA,CAAW,SAAA;AAAA,IAC7B,aAAa,MAAA,CAAO,WAAA;AAAA,IACpB;AAAA,GACD,CAAA;AACD,EAAA,IAAI,WAAA,KAAiB,MAAM,gBAAA,CAAiB,GAAA,EAAK,GAAG,CAAA,EAAI;AACtD,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,EAAG,IAAI,IAAI,CAAA,wFAAA,CAAA;AAAA,MACX;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,SAAS,GAAA,CAAI,OAAA;AAAA,IACb,uBAAuB,GAAA,CAAI,qBAAA;AAAA,IAC3B,aAAa,GAAA,CAAI,WAAA;AAAA,IACjB,UAAU,GAAA,CAAI,QAAA;AAAA,IACd,YAAY,IAAA,CAAK;AAAA,GACnB;AACF;AAwBA,eAAsB,uBAAA,CAAwB,KAAa,MAAA,EAAyD;AAClH,EAAA,MAAM,YAAY,MAAM,sBAAA,CAAuB,GAAA,EAAK,MAAA,CAAO,WAAW,SAAS,CAAA;AAC/E,EAAA,MAAM,OAAA,GAAU,UAAU,OAAA,CAAQ,OAAA;AAClC,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,EAAA,CAAG,EAAE,CAAA;AACzB,EAAA,IAAI,CAAC,GAAA,EAAK,OAAO,EAAC;AAClB,EAAA,IAAI,GAAA,CAAI,YAAA,KAAiB,MAAA,CAAO,WAAA,EAAa;AAC3C,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,0BAAA,EAA6B,IAAI,IAAI,CAAA,gEAAA,CAAA;AAAA,MACrC,GAAG,kBAAkB,CAAA,kBAAA;AAAA,KACvB;AAAA,EACF;AACA,EAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,IAC7B,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,aAAa,KAAA,CAAM,YAAA;AAAA,IACnB,qBAAqB,KAAA,CAAM;AAAA,GAC7B,CAAE,CAAA;AACJ;;;ACjFA,eAAsB,YAAY,EAAE,GAAA,EAAK,gBAAA,EAAkB,KAAA,EAAO,KAAI,EAAiC;AACrG,EAAA,MAAM,MAAA,GAAS,MAAM,uBAAA,CAAwB,GAAG,CAAA;AAChD,EAAA,MAAM,YAAY,MAAM,sBAAA,CAAuB,GAAA,EAAK,MAAA,CAAO,WAAW,SAAS,CAAA;AAC/E,EAAA,MAAM,GAAA,GAAM,SAAA,CAAU,OAAA,CAAQ,OAAA,CAAQ,GAAG,EAAE,CAAA;AAE3C,EAAA,IAAI,KAAA,SAAc,cAAA,CAAe,EAAE,KAAK,MAAA,EAAQ,SAAA,EAAW,GAAA,EAAK,GAAA,EAAK,CAAA;AAErE,EAAA,IAAI,GAAA,EAAK,YAAA,KAAiB,MAAA,CAAO,WAAA,EAAa;AAC5C,IAAA,GAAA,CAAI,CAAA,kBAAA,EAAgB,kBAAkB,CAAA,CAAA,EAAI,GAAA,CAAI,IAAI,CAAA,oCAAA,CAAsC,CAAA;AACxF,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,MAAM,IAAA,GAAO,MAAM,aAAA,CAAc,EAAE,UAAA,EAAY,OAAO,UAAA,EAAY,gBAAA,EAAkB,SAAA,CAAU,WAAA,EAAa,CAAA;AAC3G,EAAA,MAAM,WAAA,GAAc,mBAAA,CAAoB,IAAA,CAAK,UAAU,CAAA;AACvD,EAAA,IAAI,WAAA,CAAY,MAAA,GAAS,CAAA,IAAK,CAAC,gBAAA,EAAkB;AAC/C,IAAA,GAAA,CAAI,kEAA6D,CAAA;AACjE,IAAA,KAAA,MAAW,SAAA,IAAa,WAAA,EAAa,GAAA,CAAI,CAAA,EAAA,EAAK,SAAA,CAAU,SAAA,CAAU,GAAG,CAAC,CAAA,KAAA,EAAQ,SAAA,CAAU,MAAM,CAAA,CAAE,CAAA;AAChG,IAAA,GAAA,CAAI,qJAAqJ,CAAA;AACzJ,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAA,GAAU,MAAM,cAAA,CAAe;AAAA,IACnC,GAAA;AAAA,IACA,SAAA;AAAA,IACA,IAAA;AAAA,IACA,aAAa,MAAA,CAAO,WAAA;AAAA,IACpB,WAAA,EAAa,YAAY,MAAA,GAAS;AAAA,GACnC,CAAA;AACD,EAAA,GAAA;AAAA,IACE,CAAA,MAAA,EAAS,kBAAkB,CAAA,CAAA,EAAI,OAAA,CAAQ,IAAI,CAAA,YAAA,EAAU,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA,aAAA,CAAA,IACxE,OAAA,CAAQ,WAAA,GAAc,yDAAA,GAAuD,EAAA;AAAA,GAClF;AACA,EAAA,OAAO,CAAA;AACT;AAEA,eAAe,cAAA,CAAe;AAAA,EAC5B,GAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAA;AAAA,EACA;AACF,CAAA,EAMoB;AAClB,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,GAAA,CAAI,CAAA,6BAAA,EAAgC,MAAA,CAAO,UAAA,CAAW,SAAS,CAAA,0DAAA,CAAuD,CAAA;AACtH,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,IAAIP,WAAAA;AACJ,EAAA,IAAI,YAAA,GAA8B,IAAA;AAClC,EAAA,KAAA,MAAW,KAAA,IAAS,SAAA,CAAU,OAAA,CAAQ,OAAA,EAAS;AAC7C,IAAA,MAAMhB,IAAAA,GAAM,MAAM,gBAAA,CAAiB,GAAA,EAAK,KAAK,CAAA;AAC7C,IAAA,IAAI,UAAA,CAAWA,IAAG,CAAA,KAAM,KAAA,CAAM,QAAA,EAAU;AACtC,MAAA,GAAA,CAAI,CAAA,EAAG,kBAAkB,CAAA,CAAA,EAAI,KAAA,CAAM,IAAI,CAAA,uFAAA,CAAoF,CAAA;AAC3H,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,MAAM,YAAA,GAAe,MAAM,gBAAA,CAAiB,GAAA,EAAK,MAAM,OAAO,CAAA;AAC9D,IAAA,IAAI,UAAA,CAAW,YAAY,CAAA,KAAM,KAAA,CAAM,iBAAA,EAAmB;AACxD,MAAA,GAAA,CAAI,CAAA,iBAAA,EAAoB,KAAA,CAAM,IAAI,CAAA,+GAAA,CAA4G,CAAA;AAC9I,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,YAAY,CAAA;AACxC,IAAA,IAAI,KAAA,CAAM,OAAA,GAAU,CAAA,IAAK,QAAA,CAAS,WAAWgB,WAAAA,EAAY;AACvD,MAAA,GAAA,CAAI,CAAA,yBAAA,EAA4B,KAAA,CAAM,IAAI,CAAA,6DAAA,CAA0D,CAAA;AACpG,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,IAAI,KAAA,CAAM,0BAA0B,YAAA,EAAc;AAChD,MAAA,GAAA,CAAI,CAAA,6BAAA,EAAgC,KAAA,CAAM,IAAI,CAAA,uEAAA,CAAoE,CAAA;AAClH,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAAA,cAAa,QAAA,CAAS,EAAA;AACtB,IAAA,YAAA,GAAe,KAAA,CAAM,YAAA;AAAA,EACvB;AAEA,EAAA,IAAI,GAAA,CAAI,YAAA,KAAiB,MAAA,CAAO,WAAA,EAAa;AAC3C,IAAA,GAAA,CAAI,CAAA,0BAAA,EAA6B,GAAA,CAAI,IAAI,CAAA,gEAAA,CAA6D,CAAA;AACtG,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,MAAM,gBAAA,GAAmB,GAAA,CAAI,OAAA,GAAU,CAAA,GAAI,MAAM,aAAa,GAAA,EAAK,GAAA,CAAI,OAAA,GAAU,CAAC,CAAA,GAAI,MAAA;AACtF,EAAA,MAAM,IAAA,GAAO,MAAM,aAAA,CAAc,EAAE,YAAY,MAAA,CAAO,UAAA,EAAY,kBAAkB,CAAA;AACpF,EAAA,MAAM,cAAc,kBAAA,CAAmB;AAAA,IACrC,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,SAAA,EAAW,OAAO,UAAA,CAAW,SAAA;AAAA,IAC7B,aAAa,MAAA,CAAO,WAAA;AAAA,IACpB;AAAA,GACD,CAAA;AACD,EAAA,IAAI,WAAA,KAAiB,MAAM,gBAAA,CAAiB,GAAA,EAAK,GAAG,CAAA,EAAI;AACtD,IAAA,GAAA,CAAI,CAAA,EAAG,kBAAkB,CAAA,CAAA,EAAI,GAAA,CAAI,IAAI,CAAA,mFAAA,CAAgF,CAAA;AACrH,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,GAAA,CAAI,CAAA,0BAAA,EAAwB,UAAU,OAAA,CAAQ,OAAA,CAAQ,MAAM,CAAA,gBAAA,EAAmB,GAAA,CAAI,IAAI,CAAA,CAAE,CAAA;AACzF,EAAA,OAAO,CAAA;AACT;AAEA,IAAM,SAAA,GAAY,CAAChB,IAAAA,KAAwBA,IAAAA,CAAI,MAAM,IAAI,CAAA,CAAE,CAAC,CAAA,IAAKA,IAAAA;;;AChH1D,SAAS,yBAAyB,KAAA,EAAqC;AAC5E,EAAA,MAAM,SAAA,GAAY,iBAAiB,KAAK,CAAA;AACxC,EAAA,MAAM,QAAQ,SAAA,CAAU,MAAA,CAAO,GAAA,CAAI,CAAC,OAAOD,MAAAA,KAAU;AACnD,IAAA,MAAM,KAAA,GAAQ;AAAA,MACZ,WAAW,SAAA,CAAU,SAAA;AAAA,MACrB,KAAA,EAAO,MAAM,OAAO,CAAA;AAAA,MACpB,WAAA,EAAa,KAAA,CAAM,aAAa,CAAA,IAAK,MAAA;AAAA,MACrC,OAAA,EAAS,KAAA,CAAM,SAAS,CAAA,IAAK,MAAA;AAAA,MAC7B,MAAA,EAAQ,KAAA,CAAM,QAAQ,CAAA,IAAK,MAAA;AAAA,MAC3B,KAAA,EAAO,KAAA,CAAM,OAAO,CAAA,IAAK,MAAA;AAAA,MACzB,OAAA,EAAS,KAAA,CAAM,SAAS,CAAA,IAAK,MAAA;AAAA,MAC7B,QAAA,EAAU,iBAAA,CAAkB,KAAA,CAAM,UAAU,CAAC,CAAA;AAAA,MAC7C,OAAA,EAAS,gBAAA,CAAiB,KAAA,CAAM,SAAS,CAAC;AAAA,KAC5C;AACA,IAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,SAAA,CAAU,KAAK,CAAA;AAC9C,IAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA;AACnC,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,CAAA,4BAAA,EAA+B,OAAO,KAAA,CAAM,OAAO,CAAC,CAAC,CAAA,aAAA,EAAgB,KAAA,EAAO,OAAA,IAAW,eAAe,CAAA,CAAA;AAAA,QACtG,aAAaA,MAAK,CAAA,CAAA;AAAA,OACpB;AAAA,IACF;AACA,IAAA,OAAO,EAAE,IAAA,EAAM,CAAA,UAAA,EAAaA,MAAK,CAAA,CAAA,CAAA,EAAK,KAAA,EAAO,OAAO,IAAA,EAAK;AAAA,EAC3D,CAAC,CAAA;AAID,EAAA,MAAM,MAAA,GAAS,sBAAsB,SAAA,CAAU;AAAA,IAC7C,WAAW,SAAA,CAAU,SAAA;AAAA,IACrB,WAAA,EAAa,UAAU,WAAA,IAAe,MAAA;AAAA,IACtC,YAAA,EAAc,UAAU,YAAA,IAAgB;AAAA,GACzC,CAAA;AACD,EAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA;AACnC,IAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,oCAAA,EAAuC,OAAO,OAAA,IAAW,eAAe,IAAI,WAAW,CAAA;AAAA,EACtH;AACA,EAAA,OAAO,wBAAA,CAAyB,KAAA,EAAO,MAAA,CAAO,IAAI,CAAA;AACpD;AAEA,SAAS,iBAAiB,KAAA,EAAgC;AACxD,EAAA,IAAI,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,YAAY,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACvE,IAAA,MAAM,IAAI,mBAAmB,oCAAoC,CAAA;AAAA,EACnE;AACA,EAAA,MAAM,MAAA,GAAS,KAAA;AACf,EAAA,IAAI,OAAO,MAAA,CAAO,WAAW,CAAA,KAAM,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,QAAQ,CAAC,CAAA,EAAG;AAC/E,IAAA,MAAM,IAAI,mBAAmB,+CAA+C,CAAA;AAAA,EAC9E;AACA,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,OAAO,WAAW,CAAA;AAAA;AAAA,IAE7B,WAAA,EAAa,OAAO,MAAA,CAAO,aAAa,MAAM,QAAA,GAAW,MAAA,CAAO,aAAa,CAAA,GAAI,IAAA;AAAA,IACjF,YAAA,EAAc,MAAA,CAAO,cAAc,CAAA,IAAK,MAAA;AAAA,IACxC,MAAA,EAAQ,OAAO,QAAQ;AAAA,GACzB;AACF;AAEA,SAAS,kBAAkB,KAAA,EAAqD;AAC9E,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,MAAA;AACxD,EAAA,MAAM,MAAA,GAAS,KAAA;AACf,EAAA,MAAM,WAAoC,EAAC;AAC3C,EAAA,IAAI,OAAO,OAAO,MAAM,CAAA,KAAM,UAAU,QAAA,CAAS,MAAM,CAAA,GAAI,MAAA,CAAO,MAAM,CAAA;AACxE,EAAA,IAAI,OAAO,OAAO,OAAO,CAAA,KAAM,UAAU,QAAA,CAAS,OAAO,CAAA,GAAI,MAAA,CAAO,OAAO,CAAA;AAC3E,EAAA,OAAO,OAAO,IAAA,CAAK,QAAQ,CAAA,CAAE,MAAA,GAAS,IAAI,QAAA,GAAW,MAAA;AACvD;AAEA,SAAS,iBAAiB,KAAA,EAAqD;AAC7E,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,MAAA;AACxD,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,KAAgD,CAAA;AAC/E,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,MAAA;AACjC,EAAA,OAAO,MAAA,CAAO,WAAA;AAAA,IACZ,QAAQ,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,MAAM,CAAA,KAAM;AAAA,MAC9B,IAAA;AAAA,MACA;AAAA,QACE,WAAA,EAAa,MAAA,CAAO,aAAa,CAAA,IAAK,MAAA;AAAA,QACtC,QAAA,EAAU,MAAA,CAAO,UAAU,CAAA,IAAK,MAAA;AAAA,QAChC,MAAA,EAAQ,MAAA,CAAO,QAAQ,CAAA,IAAK,MAAA;AAAA,QAC5B,SAAA,EAAW,MAAA,CAAO,WAAW,CAAA,IAAK,MAAA;AAAA,QAClC,QAAA,EAAU,OAAO,UAAU,CAAA;AAAA,QAC3B,OAAA,EAAS,MAAA,CAAO,SAAS,CAAA,IAAK,MAAA;AAAA,QAC9B,KAAA,EAAO,MAAA,CAAO,OAAO,CAAA,IAAK;AAAA;AAC5B,KACD;AAAA,GACH;AACF","file":"index.cjs","sourcesContent":["import type { ActionDefinition } from '../schema/actions.js'\nimport type { ColumnDefinition, ColumnType } from '../schema/columns.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\n\n/**\n * Wire types per column type — what a Data API row actually carries after\n * the driver + JSON serialization, not the Postgres type. Mirrors\n * engine/columns.ts: bigint arrives as a STRING (int8 exceeds JS number\n * precision, so the executor serializes it losslessly); numeric stays a\n * string (exact decimal); timestamptz serializes to an ISO string.\n */\nconst WIRE_TYPES: Readonly<Record<ColumnType, string>> = {\n uuid: 'string',\n text: 'string',\n integer: 'number',\n bigint: 'string',\n numeric: 'string',\n double: 'number',\n boolean: 'boolean',\n timestamptz: 'string',\n date: 'string',\n jsonb: 'unknown',\n}\n\n/**\n * Emit the `Tables` type for a namespace — the generic parameter for\n * `createOrmClient<…Tables>`. A `type` alias, deliberately not an\n * `interface`: object type literals carry the implicit index signature that\n * satisfies the client's `Record<string, Record<string, unknown>>`\n * constraint; interfaces don't. Derived from the definitions alone (no\n * database), so generation is deterministic and runs offline.\n */\nexport function generateNamespaceTypes(definition: NamespaceDefinition): string {\n const lines: string[] = [\n `// Generated by \\`seq-studio orm apply\\` from the '${definition.namespace}' definitions — do not edit.`,\n '',\n `export type ${typesInterfaceName(definition.namespace)} = {`,\n ]\n for (const table of definition.tables) {\n if (table.source) {\n // Synced tables reflect their gold source at apply — the definitions\n // don't declare columns, so the row type stays permissive until\n // reflected generation lands. Readable through the client today.\n lines.push(` /** Synced from ${table.source} — columns reflect the gold source. */`)\n lines.push(` ${table.table}: Record<string, unknown>`)\n continue\n }\n lines.push(` ${table.table}: {`)\n for (const [name, column] of Object.entries(table.columns ?? {})) {\n // Phase one of a column retirement: deprecated columns leave the typed\n // surface while the data stays, so consumers migrate before the drop.\n if (column.deprecated) continue\n lines.push(` ${name}: ${columnWireType(column)}`)\n }\n lines.push(' }')\n }\n lines.push('}', '')\n lines.push(...actionTypeLines(definition))\n return lines.join('\\n')\n}\n\n/**\n * Emit the `Actions` type for a namespace — the second generic parameter for\n * `createOrmClient<…Tables, …Actions>`, keying each action to its param and\n * result shapes. An action with `returns:` resolves to `{ rows: Row[] }`; a\n * count action to `{ rowsAffected: number }`. Derived from the definitions\n * alone, like the table types.\n */\nfunction actionTypeLines(definition: NamespaceDefinition): string[] {\n const actions = definition.tables.flatMap((table) => Object.entries(table.actions ?? {}))\n const lines = [`export type ${actionsInterfaceName(definition.namespace)} = {`]\n for (const [name, action] of actions.sort(([a], [b]) => a.localeCompare(b))) {\n lines.push(` ${name}: { params: ${actionParamsType(action)}; result: ${actionResultType(action)} }`)\n }\n lines.push('}', '')\n return lines\n}\n\nfunction actionParamsType(action: ActionDefinition): string {\n const entries = Object.entries(action.params ?? {})\n if (entries.length === 0) return 'Record<never, never>'\n const fields = entries.map(([name, param]) => {\n const base = WIRE_TYPES[param.type]\n return param.optional ? `${name}?: ${base} | null` : `${name}: ${base}`\n })\n return `{ ${fields.join('; ')} }`\n}\n\nfunction actionResultType(action: ActionDefinition): string {\n if (!action.returns) return '{ rowsAffected: number }'\n // A RETURNING column is nullable at runtime and `returns` records only the\n // type, so every field is `| null` (unknown jsonb already subsumes null).\n const columns = Object.entries(action.returns).map(([name, type]) => {\n const base = WIRE_TYPES[type]\n return base === 'unknown' ? `${name}: ${base}` : `${name}: ${base} | null`\n })\n return `{ rows: Array<{ ${columns.join('; ')} }> }`\n}\n\nexport function typesInterfaceName(namespace: string): string {\n return `${pascalCase(namespace)}Tables`\n}\n\nexport function actionsInterfaceName(namespace: string): string {\n return `${pascalCase(namespace)}Actions`\n}\n\nfunction pascalCase(namespace: string): string {\n return namespace\n .split('_')\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('')\n}\n\nfunction columnWireType(column: ColumnDefinition): string {\n const base = WIRE_TYPES[column.type]\n const notNull = column.primary_key === true || column.nullable === false\n return notNull || base === 'unknown' ? base : `${base} | null`\n}\n","/** Namespace names become Postgres identifiers (`orm_<ns>` schema, `orm_<ns>_consumer` role) — the tight grammar is a security control, not cosmetics. */\nexport const NAMESPACE_PATTERN = /^[a-z][a-z0-9_]{0,40}$/\n\nexport const IDENTIFIER_PATTERN = /^[a-z][a-z0-9_]*$/\nexport const MAX_IDENTIFIER_LENGTH = 63\n\n/**\n * The Data API carries a delegated, attenuated data token on this header (not\n * `Authorization`, which stays the app-user/session bearer). One definition\n * shared by the client transport, the server's caller resolver, and the\n * function-invoke minter, so all three agree.\n */\nexport const ORM_DATA_TOKEN_HEADER = 'x-sequence-data-token'\n\n/**\n * The SEPARATE header the invoke proxy uses to hand a managed function its\n * *service* data token — the escalation path. A function receives BOTH this and\n * `ORM_DATA_TOKEN_HEADER`; the default `createOrmClient` reads the user token,\n * the deliberately-named `createServiceOrmClient` reads THIS one. Two distinct\n * headers so reaching for the service identity is always an explicit act, never\n * an accidental default. Both are sent to the Data API on `ORM_DATA_TOKEN_HEADER`\n * — the server stays mode-agnostic and resolves whatever sub the token carries.\n */\nexport const ORM_SERVICE_DATA_TOKEN_HEADER = 'x-sequence-data-token-service'\n\n/**\n * Custom Roles & Capabilities claim keys as policies reference them: a\n * host-scoped registry key, or an org pin's `org/<key>`. Matches the registry\n * key grammar EXACTLY (`[a-z0-9-]`, 1–64 chars, no `_` — the FGA object-id\n * delimiter) so any capability that's declarable/attachable in namespace.yaml\n * can also be referenced here — a stricter pattern would let a valid key\n * register yet fail at apply (e.g. `org/2fa`, a one-char or digit-led key).\n */\nexport const CAPABILITY_KEY_PATTERN = /^(?:org\\/)?[a-z0-9-]{1,64}$/\n\nexport const CLAIM_KEY_PATTERN = /^[a-z][a-z0-9_]*$/\n\n/** Qualified reference to a table outside the defining file: `<schema>.<table>`. */\nexport const QUALIFIED_TABLE_PATTERN = /^[a-z][a-z0-9_]*\\.[a-z][a-z0-9_]*$/\n\n/** Synced reflected sources are restricted to the gold layer. */\nexport const SYNCED_SOURCE_PATTERN = /^gold\\.[a-z][a-z0-9_]*$/\n\nexport const ORM_SCHEMA_PREFIX = 'orm_'\nexport const CONSUMER_ROLE_SUFFIX = '_consumer'\n\nexport const ormSchemaName = (namespace: string): string => `${ORM_SCHEMA_PREFIX}${namespace}`\nexport const consumerRoleName = (namespace: string): string =>\n `${ORM_SCHEMA_PREFIX}${namespace}${CONSUMER_ROLE_SUFFIX}`\n\nexport const DEFINITION_FILE_EXTENSIONS = ['.yml', '.yaml'] as const\n\n/** Reserved basenames for the namespace-level config file (description, org capability pins). */\nexport const NAMESPACE_CONFIG_FILENAMES = new Set(['namespace.yaml', 'namespace.yml'])\n\nexport const HASH_DOMAIN = 'sequence-orm-definitions\\0'\n\n/**\n * The one size guard the package owns: a per-file byte cap where the loader\n * reads untrusted YAML into memory — a real failure mode, not a product\n * limit. Counts of tables/indexes/params and policy/SQL lengths are\n * deliberately uncapped; Postgres enforces its own limits loudly at apply.\n */\nexport const MAX_DEFINITION_FILE_BYTES = 1024 * 1024\n\n/** `/api/data/<ns>/actions/…` and `/api/data/<ns>/query` share the table path segment. */\nexport const RESERVED_TABLE_NAMES = new Set(['actions', 'query'])\n\n/**\n * The Data API's query-string grammar owns these parameter names — a column\n * with one of them could never be filtered over the wire, so definitions\n * refuse it up front (\"validate rejects only what can never work\").\n */\nexport const RESERVED_COLUMN_NAMES = new Set(['select', 'order', 'limit', 'offset'])\n","export class OrmDefinitionError extends Error {\n override readonly name = 'OrmDefinitionError'\n\n constructor(\n message: string,\n readonly file?: string,\n ) {\n super(file ? `${file}: ${message}` : message)\n }\n}\n\nexport class PredicateParseError extends Error {\n override readonly name = 'PredicateParseError'\n\n constructor(\n message: string,\n readonly position: number,\n ) {\n super(`${message} (at position ${position})`)\n }\n}\n","export const COMPARE_OPS = ['=', '!=', '<', '<=', '>', '>='] as const\nexport type CompareOp = (typeof COMPARE_OPS)[number]\n\nexport type Operand =\n | { kind: 'column'; name: string }\n | { kind: 'claim'; key: string }\n | { kind: 'literal'; value: string | number | boolean | null }\n\nexport type Predicate =\n | { kind: 'and'; operands: readonly Predicate[] }\n | { kind: 'or'; operands: readonly Predicate[] }\n | { kind: 'not'; operand: Predicate }\n | { kind: 'compare'; op: CompareOp; left: Operand; right: Operand }\n | { kind: 'capability'; key: string }\n\nexport interface ParsedPredicate {\n readonly source: string\n readonly ast: Predicate\n}\n\nexport function walkPredicate(predicate: Predicate, visit: (node: Predicate) => void): void {\n visit(predicate)\n if (predicate.kind === 'and' || predicate.kind === 'or') {\n for (const operand of predicate.operands) walkPredicate(operand, visit)\n }\n if (predicate.kind === 'not') walkPredicate(predicate.operand, visit)\n}\n\nexport function predicateOperands(predicate: Predicate): Operand[] {\n const operands: Operand[] = []\n walkPredicate(predicate, (node) => {\n if (node.kind === 'compare') operands.push(node.left, node.right)\n })\n return operands\n}\n\nexport function referencedColumns(predicate: Predicate): string[] {\n const names = predicateOperands(predicate).flatMap((operand) =>\n operand.kind === 'column' ? [operand.name] : [],\n )\n return [...new Set(names)]\n}\n\nexport function referencedCapabilities(predicate: Predicate): string[] {\n const keys: string[] = []\n walkPredicate(predicate, (node) => {\n if (node.kind === 'capability') keys.push(node.key)\n })\n return [...new Set(keys)]\n}\n","import { z } from 'zod'\nimport {\n IDENTIFIER_PATTERN,\n MAX_IDENTIFIER_LENGTH,\n NAMESPACE_PATTERN,\n QUALIFIED_TABLE_PATTERN,\n} from '../constants.js'\n\nexport const identifierSchema = z\n .string()\n .max(MAX_IDENTIFIER_LENGTH)\n .regex(IDENTIFIER_PATTERN, 'must be a lowercase identifier (a-z, 0-9, _)')\n\nexport const namespaceSchema = z\n .string()\n .regex(NAMESPACE_PATTERN, 'must be lowercase, start with a letter, and be at most 41 characters')\n\n/** `<table>` for a table in the same namespace, `<schema>.<table>` for anything else. */\nexport const tableReferenceSchema = z\n .string()\n .refine(\n (value) => IDENTIFIER_PATTERN.test(value) || QUALIFIED_TABLE_PATTERN.test(value),\n 'must be a table name or a schema-qualified table reference',\n )\n\nexport const isQualifiedReference = (reference: string): boolean => reference.includes('.')\n","import { z } from 'zod'\nimport { identifierSchema } from './identifiers.js'\n\nexport const COLUMN_TYPES = [\n 'uuid',\n 'text',\n 'integer',\n 'bigint',\n 'numeric',\n 'double',\n 'boolean',\n 'timestamptz',\n 'date',\n 'jsonb',\n] as const\n\nexport type ColumnType = (typeof COLUMN_TYPES)[number]\n\nexport const columnTypeSchema = z.enum(COLUMN_TYPES)\n\nconst FUNCTION_DEFAULTS: Readonly<Record<string, readonly ColumnType[]>> = {\n 'gen_random_uuid()': ['uuid'],\n 'now()': ['timestamptz', 'date'],\n}\n\nconst CAST_PATTERN = /^([a-z][a-z0-9_]*)::([a-z]+)$/\n\n/**\n * True when the default is one of the allowlisted SQL function calls for its\n * type — the ONLY defaults the engine may emit as raw SQL. Everything else\n * is a literal value; in particular a text default that happens to end in\n * `()` is data, never code.\n */\nexport const isFunctionDefault = (value: ColumnDefault, type: ColumnType): boolean =>\n typeof value === 'string' && (FUNCTION_DEFAULTS[value]?.includes(type) ?? false)\n\nexport type ColumnDefault = string | number | boolean\n\nexport interface ColumnDefinition {\n readonly type: ColumnType\n readonly primary_key?: boolean\n readonly nullable?: boolean\n readonly unique?: boolean\n readonly default?: ColumnDefault\n readonly description?: string\n readonly renamed_from?: string\n readonly cast?: string\n readonly deprecated?: boolean\n}\n\nfunction defaultIssue(value: ColumnDefault, type: ColumnType): string | null {\n if (typeof value === 'boolean') return type === 'boolean' ? null : `boolean default is invalid for type '${type}'`\n if (typeof value === 'number') {\n if (!['integer', 'bigint', 'numeric', 'double'].includes(type)) {\n return `numeric default is invalid for type '${type}'`\n }\n if (['integer', 'bigint'].includes(type)) {\n if (!Number.isInteger(value)) return `default for type '${type}' must be an integer`\n if (!Number.isSafeInteger(value)) {\n return `default for type '${type}' exceeds the safe integer range — YAML numbers lose precision past 2^53`\n }\n }\n // `numeric` is exact-precision in Postgres but this value already went\n // through a JS float — past 2^53 it may not be what was written. Quote\n // it as a string to keep exact precision. (`double` IS a float; fine.)\n if (type === 'numeric' && Math.abs(value) > Number.MAX_SAFE_INTEGER) {\n return \"numeric default exceeds the safe float range — write it as a string (e.g. '9007199254740993') to keep exact precision\"\n }\n return null\n }\n // The exact allowlisted function names always validate against their\n // types — `now()` on a text column is a misdeclared type, not a literal.\n const allowedTypes = FUNCTION_DEFAULTS[value]\n if (allowedTypes) return allowedTypes.includes(type) ? null : `default '${value}' is invalid for type '${type}'`\n // Any other string default is a quoted literal — including strings ending\n // in `()`, which are data, never code. Whether the literal parses is the\n // column input function's call at apply; string grammars (uuid forms,\n // numeric notations, date formats) are never mirrored client-side.\n return null\n}\n\nexport const columnSchema = z\n .strictObject({\n type: columnTypeSchema,\n primary_key: z.boolean().optional(),\n nullable: z.boolean().optional(),\n unique: z.boolean().optional(),\n default: z.union([z.string(), z.number(), z.boolean()]).optional(),\n description: z.string().optional(),\n renamed_from: identifierSchema.optional(),\n cast: z.string().optional(),\n deprecated: z.boolean().optional(),\n })\n .superRefine((column, ctx) => {\n if (column.default !== undefined) {\n const issue = defaultIssue(column.default, column.type)\n if (issue) ctx.addIssue({ code: 'custom', message: issue, path: ['default'] })\n }\n if (column.primary_key && column.nullable) {\n ctx.addIssue({ code: 'custom', message: 'a primary key column cannot be nullable', path: ['nullable'] })\n }\n if (column.primary_key && column.deprecated) {\n ctx.addIssue({ code: 'custom', message: 'a primary key column cannot be deprecated', path: ['deprecated'] })\n }\n if (column.cast && !CAST_PATTERN.test(column.cast)) {\n ctx.addIssue({ code: 'custom', message: \"cast must have the shape '<column>::<type>'\", path: ['cast'] })\n }\n })\n\nexport function castParts(cast: string): { column: string; type: string } | null {\n const match = CAST_PATTERN.exec(cast)\n if (!match) return null\n return { column: match[1] as string, type: match[2] as string }\n}\n","import { CAPABILITY_KEY_PATTERN, CLAIM_KEY_PATTERN, IDENTIFIER_PATTERN } from '../constants.js'\nimport { PredicateParseError } from '../errors.js'\nimport { COMPARE_OPS, type CompareOp, type Operand, type ParsedPredicate, type Predicate } from './ast.js'\n\ntype TokenKind = 'identifier' | 'string' | 'number' | 'operator' | 'lparen' | 'rparen' | 'comma' | 'end'\n\ninterface Token {\n readonly kind: TokenKind\n readonly value: string\n readonly position: number\n}\n\nconst KEYWORDS = new Set(['and', 'or', 'not', 'true', 'false', 'null', 'claim', 'capability'])\nconst OPERATOR_PATTERN = /^(!=|<=|>=|<>|=|<|>)/\nconst IDENTIFIER_START = /[a-z_]/\nconst IDENTIFIER_CHAR = /[a-z0-9_.-]/\nconst NUMBER_PATTERN = /^-?\\d+(\\.\\d+)?/\n\nfunction tokenize(source: string): Token[] {\n const tokens: Token[] = []\n let position = 0\n\n while (position < source.length) {\n const char = source[position] as string\n\n if (/\\s/.test(char)) {\n position += 1\n continue\n }\n if (char === '(') {\n tokens.push({ kind: 'lparen', value: char, position })\n position += 1\n continue\n }\n if (char === ')') {\n tokens.push({ kind: 'rparen', value: char, position })\n position += 1\n continue\n }\n if (char === ',') {\n tokens.push({ kind: 'comma', value: char, position })\n position += 1\n continue\n }\n if (char === \"'\") {\n const { value, end } = readString(source, position)\n tokens.push({ kind: 'string', value, position })\n position = end\n continue\n }\n\n const operator = OPERATOR_PATTERN.exec(source.slice(position))\n if (operator) {\n const value = operator[0] === '<>' ? '!=' : operator[0]\n tokens.push({ kind: 'operator', value, position })\n position += operator[0].length\n continue\n }\n\n const number = NUMBER_PATTERN.exec(source.slice(position))\n if (number && !IDENTIFIER_START.test(char)) {\n tokens.push({ kind: 'number', value: number[0], position })\n position += number[0].length\n continue\n }\n\n if (IDENTIFIER_START.test(char)) {\n let end = position\n while (end < source.length && IDENTIFIER_CHAR.test(source[end] as string)) end += 1\n tokens.push({ kind: 'identifier', value: source.slice(position, end), position })\n position = end\n continue\n }\n\n throw new PredicateParseError(`unexpected character '${char}'`, position)\n }\n\n tokens.push({ kind: 'end', value: '', position: source.length })\n return tokens\n}\n\nfunction readString(source: string, start: number): { value: string; end: number } {\n let value = ''\n let position = start + 1\n while (position < source.length) {\n const char = source[position] as string\n if (char !== \"'\") {\n value += char\n position += 1\n continue\n }\n if (source[position + 1] === \"'\") {\n value += \"'\"\n position += 2\n continue\n }\n return { value, end: position + 1 }\n }\n throw new PredicateParseError('unterminated string literal', start)\n}\n\nclass Parser {\n private index = 0\n\n constructor(private readonly tokens: Token[]) {}\n\n parse(): Predicate {\n const predicate = this.parseOr()\n this.expect('end', 'end of expression')\n return predicate\n }\n\n private parseOr(): Predicate {\n const operands = [this.parseAnd()]\n while (this.matchKeyword('or')) operands.push(this.parseAnd())\n return operands.length === 1 ? (operands[0] as Predicate) : { kind: 'or', operands }\n }\n\n private parseAnd(): Predicate {\n const operands = [this.parseNot()]\n while (this.matchKeyword('and')) operands.push(this.parseNot())\n return operands.length === 1 ? (operands[0] as Predicate) : { kind: 'and', operands }\n }\n\n private parseNot(): Predicate {\n if (this.matchKeyword('not')) return { kind: 'not', operand: this.parseNot() }\n return this.parsePrimary()\n }\n\n private parsePrimary(): Predicate {\n if (this.peek().kind === 'lparen') {\n this.advance()\n const inner = this.parseOr()\n this.expect('rparen', \"')'\")\n return inner\n }\n if (this.peekKeyword('capability')) {\n const capability = this.parseCapability()\n const next = this.peek()\n if (next.kind === 'operator') {\n throw new PredicateParseError('capability() is boolean-valued and cannot appear in a comparison', next.position)\n }\n return capability\n }\n return this.parseComparison()\n }\n\n private parseCapability(): Predicate {\n this.advance()\n const key = this.parseCallArgument('capability')\n if (!CAPABILITY_KEY_PATTERN.test(key)) {\n throw new PredicateParseError(`invalid capability key '${key}'`, this.peek().position)\n }\n return { kind: 'capability', key }\n }\n\n private parseComparison(): Predicate {\n const left = this.parseOperand()\n const operator = this.expect('operator', 'a comparison operator')\n if (!COMPARE_OPS.includes(operator.value as CompareOp)) {\n throw new PredicateParseError(`unsupported operator '${operator.value}'`, operator.position)\n }\n const right = this.parseOperand()\n return { kind: 'compare', op: operator.value as CompareOp, left, right }\n }\n\n private parseOperand(): Operand {\n const token = this.peek()\n\n if (token.kind === 'string') {\n this.advance()\n return { kind: 'literal', value: token.value }\n }\n if (token.kind === 'number') {\n this.advance()\n const value = Number(token.value)\n // A bigint-sized literal would silently round through the JS number and\n // compile a policy against the wrong identifier — reject; quote it.\n if (!Number.isFinite(value) || (Number.isInteger(value) && !Number.isSafeInteger(value))) {\n throw new PredicateParseError(\n `numeric literal '${token.value}' exceeds safe integer precision — quote it as a string`,\n token.position,\n )\n }\n return { kind: 'literal', value }\n }\n if (token.kind !== 'identifier') {\n throw new PredicateParseError(`expected an operand, got '${token.value || 'end'}'`, token.position)\n }\n\n this.advance()\n if (token.value === 'true' || token.value === 'false') {\n return { kind: 'literal', value: token.value === 'true' }\n }\n if (token.value === 'null') return { kind: 'literal', value: null }\n if (token.value === 'claim') {\n const key = this.parseCallArgument('claim')\n if (!CLAIM_KEY_PATTERN.test(key)) {\n throw new PredicateParseError(`invalid claim key '${key}'`, token.position)\n }\n return { kind: 'claim', key }\n }\n if (token.value === 'capability') {\n throw new PredicateParseError('capability() is boolean-valued and cannot appear in a comparison', token.position)\n }\n if (KEYWORDS.has(token.value) || !IDENTIFIER_PATTERN.test(token.value)) {\n throw new PredicateParseError(`invalid column reference '${token.value}'`, token.position)\n }\n return { kind: 'column', name: token.value }\n }\n\n private parseCallArgument(fn: 'claim' | 'capability'): string {\n this.expect('lparen', `'(' after ${fn}`)\n const argument = this.expect('string', `a quoted key in ${fn}(...)`)\n this.expect('rparen', `')' after ${fn} key`)\n return argument.value\n }\n\n private peek(): Token {\n return this.tokens[this.index] as Token\n }\n\n private peekKeyword(keyword: string): boolean {\n const token = this.peek()\n return token.kind === 'identifier' && token.value === keyword\n }\n\n private matchKeyword(keyword: string): boolean {\n if (!this.peekKeyword(keyword)) return false\n this.advance()\n return true\n }\n\n private advance(): Token {\n const token = this.peek()\n if (token.kind !== 'end') this.index += 1\n return token\n }\n\n private expect(kind: TokenKind, description: string): Token {\n const token = this.peek()\n if (token.kind !== kind) {\n throw new PredicateParseError(`expected ${description}, got '${token.value || 'end'}'`, token.position)\n }\n return this.advance()\n }\n}\n\nexport function parsePredicate(source: string): ParsedPredicate {\n const trimmed = source.trim()\n if (trimmed.length === 0) throw new PredicateParseError('empty predicate', 0)\n return { source: trimmed, ast: new Parser(tokenize(trimmed)).parse() }\n}\n","import { z } from 'zod'\nimport { parsePredicate } from '../predicate/parse.js'\nimport type { ParsedPredicate } from '../predicate/ast.js'\n\nexport const parsedPredicateSchema = z\n .string()\n .transform((source, ctx): ParsedPredicate => {\n try {\n return parsePredicate(source)\n } catch (error) {\n ctx.addIssue({ code: 'custom', message: error instanceof Error ? error.message : String(error) })\n return z.NEVER\n }\n })\n","import { z } from 'zod'\nimport { referencedColumns } from '../predicate/ast.js'\nimport { columnTypeSchema } from './columns.js'\nimport { identifierSchema, tableReferenceSchema } from './identifiers.js'\nimport { parsedPredicateSchema } from './predicates.js'\n\nconst EXECUTES_VERB_PATTERN = /^\\s*(insert|update|delete)\\b/i\n// Dollar-quoting ($tag$…$tag$) isn't handled by the claim/param scanner (it\n// masks single-quoted literals only), so a `:param` or claim()-like text\n// inside one would be silently rewritten. Reject it — app action SQL never\n// needs it.\nconst DOLLAR_QUOTE_PATTERN = /\\$[a-zA-Z0-9_]*\\$/\n// RETURNING is how a `returns:` action populates its declared rows — so it's\n// required when returns is declared and rejected otherwise (an action without\n// returns reports rows_affected only, and a stray RETURNING would just buffer\n// discarded rows).\nconst RETURNING_PATTERN = /\\breturning\\b/i\n// Escape strings (E'…') use backslash escaping the quoted-literal scanner\n// doesn't model — in E'can\\'t :body' the \\' ends the match early and :body is\n// mis-rewritten as a bind placeholder. On string-masked text a surviving\n// `E'`/`e'` can only be an escape-string introducer (every standard literal is\n// already masked away), so reject it there. App action SQL never needs them.\nconst ESCAPE_STRING_PATTERN = /(?<![a-zA-Z0-9_])[Ee]'/\n// A valid claim()/capability() call, once its argument literal is masked to\n// '' — used to strip the good calls so any leftover bare call is malformed.\nconst MASKED_CLAIM_CALL_PATTERN = /\\b(?:claim|capability)\\(\\s*''\\s*\\)/g\n// Any claim()/capability( that survives masking + stripping is malformed\n// (unquoted arg, wrong arity) — it would compile-throw at invoke as a 500.\nconst BARE_CLAIM_CALL_PATTERN = /\\b(?:claim|capability)\\s*\\(/\nconst EXISTS_ENTRY_PATTERN = /^exists\\(\\s*'([^']+)'\\s*,\\s*([a-z][a-z0-9_]*)\\s*\\)$/\nconst NAMED_PARAM_PATTERN = /(?<!:):([a-z][a-z0-9_]*)/g\nconst QUOTED_STRING_PATTERN = /'(?:[^']|'')*'/g\nconst SQL_COMMENT_PATTERN = /--|\\/\\*/\n\nexport const actionParamSchema = z.strictObject({\n type: columnTypeSchema,\n optional: z.boolean().optional(),\n description: z.string().optional(),\n})\n\nexport interface ValidatesEntry {\n readonly source: string\n readonly table: string\n readonly param: string\n}\n\nconst validatesEntrySchema = z\n .string()\n .transform((source, ctx): ValidatesEntry => {\n const match = EXISTS_ENTRY_PATTERN.exec(source.trim())\n if (!match) {\n ctx.addIssue({ code: 'custom', message: \"validates entries must have the shape exists('<table>', <param>)\" })\n return z.NEVER\n }\n const table = tableReferenceSchema.safeParse(match[1])\n if (!table.success) {\n ctx.addIssue({ code: 'custom', message: `invalid table reference '${match[1]}'` })\n return z.NEVER\n }\n return { source: source.trim(), table: table.data, param: match[2] as string }\n })\n\nexport const AUDIT_ACTIONS = ['create', 'update', 'delete'] as const\n\nconst auditSchema = z.strictObject({\n action: z.enum(AUDIT_ACTIONS),\n resource: identifierSchema.optional(),\n})\n\nexport const actionSchema = z\n .strictObject({\n description: z.string().optional(),\n requires: parsedPredicateSchema.optional(),\n params: z.record(identifierSchema, actionParamSchema).optional(),\n validates: z.array(validatesEntrySchema).optional(),\n // One statement, or an ordered list run atomically in the action function.\n executes: z.union([z.string().min(1), z.array(z.string().min(1)).min(1)]),\n // Declares the columns the action's RETURNING yields. Present → the\n // function returns those rows (typed in the client); absent → the action\n // reports rows_affected only. The column names/types must match the\n // RETURNING list, which Postgres enforces at CREATE FUNCTION.\n returns: z.record(identifierSchema, columnTypeSchema).optional(),\n audit: auditSchema.optional(),\n })\n .superRefine((action, ctx) => {\n const params = Object.keys(action.params ?? {})\n if (action.requires && referencedColumns(action.requires.ast).length > 0) {\n ctx.addIssue({\n code: 'custom',\n message: 'requires may reference claims and capabilities only, not columns',\n path: ['requires'],\n })\n }\n for (const issue of executesIssues(action.executes, new Set(params), action.returns !== undefined)) {\n ctx.addIssue({ code: 'custom', message: issue, path: ['executes'] })\n }\n // An empty `returns: {}` would compile to `RETURNS TABLE()` — invalid SQL —\n // and slip through as \"has returns\"; require at least one declared column.\n if (action.returns && Object.keys(action.returns).length === 0) {\n ctx.addIssue({ code: 'custom', message: 'returns must declare at least one column', path: ['returns'] })\n }\n for (const [index, entry] of (action.validates ?? []).entries()) {\n if (!params.includes(entry.param)) {\n ctx.addIssue({\n code: 'custom',\n message: `validates references undeclared param '${entry.param}'`,\n path: ['validates', index],\n })\n }\n }\n })\n\nexport type ActionDefinition = z.output<typeof actionSchema>\n\nexport function extractNamedParams(sql: string): string[] {\n const withoutStrings = sql.replace(QUOTED_STRING_PATTERN, \"''\")\n const names = [...withoutStrings.matchAll(NAMED_PARAM_PATTERN)].map((match) => match[1] as string)\n return [...new Set(names)]\n}\n\n/** One statement, or the ordered list — normalized to trimmed strings. */\nexport function actionStatementSources(executes: string | readonly string[]): string[] {\n return (Array.isArray(executes) ? executes : [executes]).map((statement) => statement.trim())\n}\n\n// The write target of each executes verb — the identifier right after\n// `INSERT INTO` / `UPDATE [ONLY]` / `DELETE FROM [ONLY]`, optionally\n// schema-qualified (last segment wins) and optionally double-quoted. ORM\n// identifiers are lowercase, so a case-insensitive match + lowercase is exact.\nconst WRITE_TARGET_PATTERNS: ReadonlyArray<RegExp> = [\n /^insert\\s+into\\s+(?:\"?[a-z_][a-z0-9_]*\"?\\.)?\"?([a-z_][a-z0-9_]*)\"?/i,\n /^update\\s+(?:only\\s+)?(?:\"?[a-z_][a-z0-9_]*\"?\\.)?\"?([a-z_][a-z0-9_]*)\"?/i,\n /^delete\\s+from\\s+(?:only\\s+)?(?:\"?[a-z_][a-z0-9_]*\"?\\.)?\"?([a-z_][a-z0-9_]*)\"?/i,\n]\n\n/**\n * The tables an action's `executes` statements write to — the `INSERT INTO` /\n * `UPDATE` / `DELETE FROM` targets, in first-seen order, deduped. This is the\n * authoritative write set: an action can touch more than its declaring table\n * (its `executes` may write several), so this reads the statements themselves\n * rather than assuming the owning table. Quoted string literals are masked first\n * so a table name inside a value is never mistaken for a target.\n */\nexport function actionWriteTargets(action: ActionDefinition): string[] {\n const targets: string[] = []\n const seen = new Set<string>()\n for (const statement of actionStatementSources(action.executes)) {\n const masked = statement.replace(QUOTED_STRING_PATTERN, \"''\")\n for (const pattern of WRITE_TARGET_PATTERNS) {\n const match = pattern.exec(masked)\n if (!match) continue\n const table = (match[1] as string).toLowerCase()\n if (!seen.has(table)) {\n seen.add(table)\n targets.push(table)\n }\n break\n }\n }\n return targets\n}\n\nfunction executesIssues(\n executes: string | readonly string[],\n declaredParams: ReadonlySet<string>,\n hasReturns: boolean,\n): string[] {\n const issues: string[] = []\n const statements = actionStatementSources(executes)\n statements.forEach((statement, index) => {\n // Literal-stripped form so `;`/`--`/RETURNING inside a quoted value isn't a false hit.\n const withoutStrings = statement.replace(QUOTED_STRING_PATTERN, \"''\")\n const at = statements.length > 1 ? ` (statement ${index + 1})` : ''\n if (!EXECUTES_VERB_PATTERN.test(statement)) issues.push(`executes must be INSERT, UPDATE, or DELETE${at}`)\n if (withoutStrings.replace(/;\\s*$/, '').includes(';')) issues.push(`each executes entry must be a single statement${at}`)\n if (SQL_COMMENT_PATTERN.test(withoutStrings)) issues.push(`executes must not contain SQL comments${at}`)\n if (DOLLAR_QUOTE_PATTERN.test(withoutStrings)) issues.push(`executes must not use dollar-quoted strings${at}`)\n if (ESCAPE_STRING_PATTERN.test(withoutStrings)) issues.push(`executes must not use escape strings (E'…')${at}`)\n // A double-quoted identifier hides `:param` from the compiler's literal scanner.\n if (withoutStrings.includes('\"')) issues.push(`executes must not use double-quoted identifiers${at}`)\n if (BARE_CLAIM_CALL_PATTERN.test(withoutStrings.replace(MASKED_CLAIM_CALL_PATTERN, ''))) {\n issues.push(`executes has a malformed claim()/capability() call — use e.g. claim('sub')${at}`)\n }\n // RETURNING populates the returns rows, so it belongs on the last statement\n // only, and only when returns is declared.\n if (RETURNING_PATTERN.test(withoutStrings) && !(hasReturns && index === statements.length - 1)) {\n issues.push(\n hasReturns\n ? `only the last executes statement may use RETURNING${at}`\n : `executes must not use RETURNING unless the action declares returns${at}`,\n )\n }\n })\n const last = statements.at(-1)\n if (hasReturns && last && !RETURNING_PATTERN.test(last.replace(QUOTED_STRING_PATTERN, \"''\"))) {\n issues.push('the last executes statement must use RETURNING to populate the declared returns columns')\n }\n const undeclared = extractNamedParams(statements.join('\\n')).filter((name) => !declaredParams.has(name))\n if (undeclared.length > 0) issues.push(`executes references undeclared params: ${undeclared.join(', ')}`)\n return issues\n}\n","import type { ColumnType } from '../schema/columns.js'\n\n/** Definition-surface aliases → Postgres type names as drizzle-kit snapshots them. */\nconst SQL_TYPE_NAMES: Readonly<Partial<Record<ColumnType, string>>> = {\n double: 'double precision',\n timestamptz: 'timestamp with time zone',\n}\n\nexport const sqlTypeName = (type: ColumnType): string => SQL_TYPE_NAMES[type] ?? type\n","/** Claims are stamped per transaction by the Data API (`set_config('request.jwt.claims', …, true)`). */\nexport const CLAIMS_SETTING = 'request.jwt.claims'\n\n/** Claims JSON key holding the caller's granted capability pins (a string array). */\nexport const CAPABILITIES_CLAIM_KEY = 'capabilities'\n\nexport const quoteIdentifier = (name: string): string => `\"${name.replaceAll('\"', '\"\"')}\"`\n\nexport const quoteLiteral = (value: string): string => `'${value.replaceAll(\"'\", \"''\")}'`\n\n/** `nullif(…, '')` because a session that ever set the GUC reverts it to '' (not NULL) after the transaction — ''::jsonb is an error. */\nconst CLAIMS_SOURCE = `nullif(current_setting('${CLAIMS_SETTING}', true), '')::jsonb`\n\nexport const claimExpression = (key: string): string => `(${CLAIMS_SOURCE} ->> ${quoteLiteral(key)})`\n\n/** NULL claims (or a missing capabilities array) coalesce to false — capability checks fail closed. */\nexport const capabilityExpression = (key: string): string =>\n `coalesce(${CLAIMS_SOURCE} -> '${CAPABILITIES_CLAIM_KEY}' ? ${quoteLiteral(key)}, false)`\n","import type { ColumnType } from '../schema/columns.js'\nimport type { CompareOp, Operand, Predicate } from '../predicate/ast.js'\nimport { sqlTypeName } from '../engine/types.js'\nimport { capabilityExpression, claimExpression, quoteIdentifier, quoteLiteral } from './sql.js'\n\nconst SQL_COMPARE_OPS: Readonly<Record<CompareOp, string>> = {\n '=': '=',\n '!=': '<>',\n '<': '<',\n '<=': '<=',\n '>': '>',\n '>=': '>=',\n}\n\n/** Column name → declared type, so claim comparisons can cast to the column's side. */\nexport type PredicateColumnTypes = Readonly<Record<string, ColumnType>>\n\nfunction compileOperand(operand: Operand, other: Operand, columnTypes?: PredicateColumnTypes): string {\n if (operand.kind === 'column') return quoteIdentifier(operand.name)\n if (operand.kind === 'claim') {\n const expression = claimExpression(operand.key)\n // Claims extract as text; comparing against a typed column (uuid = text\n // has no operator) needs the claim cast to the column's declared type. A\n // NULL claim stays NULL through the cast, so the policy still fails closed.\n const columnType = other.kind === 'column' ? columnTypes?.[other.name] : undefined\n return columnType && columnType !== 'text' ? `(${expression})::${sqlTypeName(columnType)}` : expression\n }\n const { value } = operand\n if (value === null) return 'NULL'\n if (typeof value === 'string') return quoteLiteral(value)\n return String(value)\n}\n\nfunction compileComparison(op: CompareOp, left: Operand, right: Operand, columnTypes?: PredicateColumnTypes): string {\n const nullSide = left.kind === 'literal' && left.value === null ? right : right.kind === 'literal' && right.value === null ? left : null\n if (nullSide && (op === '=' || op === '!=')) {\n return `${compileOperand(nullSide, nullSide, columnTypes)} IS${op === '!=' ? ' NOT' : ''} NULL`\n }\n return `${compileOperand(left, right, columnTypes)} ${SQL_COMPARE_OPS[op]} ${compileOperand(right, left, columnTypes)}`\n}\n\n/** Predicate AST → a parenthesized SQL boolean expression. Never interpolates raw policy text. */\nexport function compilePredicate(predicate: Predicate, columnTypes?: PredicateColumnTypes): string {\n switch (predicate.kind) {\n case 'and':\n case 'or': {\n const joined = predicate.operands.map((operand) => compilePredicate(operand, columnTypes)).join(` ${predicate.kind.toUpperCase()} `)\n return `(${joined})`\n }\n case 'not':\n return `(NOT ${compilePredicate(predicate.operand, columnTypes)})`\n case 'compare':\n return `(${compileComparison(predicate.op, predicate.left, predicate.right, columnTypes)})`\n case 'capability':\n return `(${capabilityExpression(predicate.key)})`\n }\n}\n","import { z } from 'zod'\nimport { CAPABILITY_KEY_PATTERN, CLAIM_KEY_PATTERN } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { actionStatementSources, type ActionDefinition } from '../schema/actions.js'\nimport type { ColumnType } from '../schema/columns.js'\nimport { compilePredicate } from './predicates.js'\nimport { capabilityExpression, claimExpression } from './sql.js'\n\n/**\n * Action definitions → the pure pieces the apply-time function generator and\n * the executor need: a zod schema for the request params, the executes body\n * with `claim()`/`capability()` rewritten to the compiled claims expressions\n * and each `:param` rewritten to its plpgsql argument name, the declared\n * param order, and the compiled `requires` gate. Raw action text never reaches\n * SQL unrewritten.\n */\n\nconst QUOTED_STRING_PATTERN = /'(?:[^']|'')*'/g\n/**\n * One scan, leftmost-wins: a claim/capability call (whose argument is itself a\n * quoted literal) matches before the bare-literal alternative, while a literal\n * that merely CONTAINS call-looking text is consumed whole and left verbatim.\n */\nconst TOKEN_PATTERN =\n /\\bclaim\\(\\s*'((?:[^']|'')*)'\\s*\\)|\\bcapability\\(\\s*'((?:[^']|'')*)'\\s*\\)|'(?:[^']|'')*'|(?<!:):([a-z][a-z0-9_]*)/g\nconst BARE_CALL_PATTERN = /\\b(?:claim|capability)\\s*\\(/\n\n/**\n * Param schemas are a SHAPE contract for the JSON body, never value grammars\n * — values reach Postgres as bind parameters and the column's input function\n * is the authority (a bad uuid/number/date fails there as the caller's 400).\n * Every scalar also accepts its string form so exact bigint/numeric values\n * survive JSON's float bottleneck.\n */\nconst PARAM_SCHEMAS: Readonly<Record<ColumnType, z.ZodType>> = {\n uuid: z.string(),\n text: z.string(),\n integer: z.union([z.number(), z.string()]),\n bigint: z.union([z.number(), z.string()]),\n numeric: z.union([z.number(), z.string()]),\n double: z.union([z.number(), z.string()]),\n boolean: z.union([z.boolean(), z.string()]),\n timestamptz: z.string(),\n date: z.string(),\n jsonb: z.unknown(),\n}\n\nexport function buildActionParamsSchema(action: ActionDefinition): z.ZodType<Record<string, unknown>> {\n const shape: Record<string, z.ZodType> = {}\n const entries = Object.entries(action.params ?? {})\n for (const [name, param] of entries) {\n // Optional → nullish so an explicit JSON null (a nullable FK cleared to\n // NULL) is accepted, not just an omitted key.\n shape[name] = param.optional ? PARAM_SCHEMAS[param.type].nullish() : PARAM_SCHEMAS[param.type]\n }\n return z.strictObject(shape).superRefine((obj, ctx) => {\n // jsonb's z.unknown() treats an absent key as valid, so a REQUIRED jsonb\n // param could be omitted and bound as SQL NULL — enforce presence here\n // (every other required scalar's schema already rejects undefined).\n for (const [name, param] of entries) {\n if (!param.optional && param.type === 'jsonb' && (obj as Record<string, unknown>)[name] === undefined) {\n ctx.addIssue({ code: 'custom', message: 'Required', path: [name] })\n }\n }\n }) as z.ZodType<Record<string, unknown>>\n}\n\n/** Declared param names in signature order — the function's arg order and the executor's positional-call order. */\nexport const actionParamOrder = (action: ActionDefinition): string[] => Object.keys(action.params ?? {})\n\n/** The plpgsql argument name for a declared param — prefixed so it can never collide with a column of the same name inside the executes body. */\nexport const actionParamArg = (name: string): string => `p_${name}`\n\n/**\n * Compile an action's `executes` (one statement or the ordered list) into the\n * statements of its Postgres function body: `claim('x')`/`capability('k')`\n * become the compiled fail-closed claims expressions (the same SQL policies\n * use), and each `:param` becomes its `p_<name>` plpgsql argument — quoted\n * literals pass through verbatim. A call shape outside the grammar (bad quoting,\n * wrong args) fails loudly here; the build also rejects it in `executesIssues`.\n */\nexport function compileActionStatements(\n action: ActionDefinition,\n renderParam: (name: string) => string = actionParamArg,\n): string[] {\n return actionStatementSources(action.executes).map((statement) => compileStatement(statement, renderParam))\n}\n\nfunction compileStatement(sql: string, renderParam: (name: string) => string): string {\n const compiled = sql.replace(TOKEN_PATTERN, (token, claimKey?: string, capabilityKey?: string, paramName?: string) => {\n if (claimKey !== undefined) {\n if (!CLAIM_KEY_PATTERN.test(claimKey)) throw new OrmDefinitionError(`invalid claim key in executes: ${token}`)\n return claimExpression(claimKey)\n }\n if (capabilityKey !== undefined) {\n if (!CAPABILITY_KEY_PATTERN.test(capabilityKey)) {\n throw new OrmDefinitionError(`invalid capability key in executes: ${token}`)\n }\n return capabilityExpression(capabilityKey)\n }\n if (paramName !== undefined) return renderParam(paramName)\n return token\n })\n\n // Literals are masked first so text inside them stays inert; a surviving\n // call shape is malformed (valid calls were rewritten away).\n if (BARE_CALL_PATTERN.test(compiled.replace(QUOTED_STRING_PATTERN, \"''\"))) {\n throw new OrmDefinitionError('executes contains a claim()/capability() call outside the grammar')\n }\n return compiled\n}\n\n/** Compiled `requires` gate — a SQL boolean over the transaction claims, or null when unguarded. */\nexport function compileActionRequires(action: ActionDefinition): string | null {\n return action.requires ? compilePredicate(action.requires.ast) : null\n}\n\n/** Capability keys referenced across the executes statements (same scan the rewrite uses). */\nexport function referencedExecuteCapabilities(action: ActionDefinition): string[] {\n const keys: string[] = []\n for (const statement of actionStatementSources(action.executes)) {\n for (const match of statement.matchAll(TOKEN_PATTERN)) {\n if (match[2] !== undefined) keys.push(match[2])\n }\n }\n return keys\n}\n","import { consumerRoleName, ormSchemaName } from '../constants.js'\nimport {\n actionParamArg,\n actionParamOrder,\n compileActionRequires,\n compileActionStatements,\n} from '../compiler/actions.js'\nimport { quoteIdentifier, quoteLiteral } from '../compiler/sql.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport type { ActionDefinition, ValidatesEntry } from '../schema/actions.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport { sqlTypeName } from './types.js'\n\n/**\n * SQLSTATEs the action function raises for the two application-level denials\n * that Postgres has no native code for. Custom 5-char classes (unused by\n * Postgres) so the executor maps them precisely: requires → 403, validates →\n * 422. RLS `WITH CHECK`, constraints, and bad values keep their native codes.\n */\nexport const ACTION_REQUIRES_DENIED_SQLSTATE = 'ORMRQ'\nexport const ACTION_VALIDATES_FAILED_SQLSTATE = 'ORMVL'\n\n/** Internal function name for a declared action — the `action_` prefix is what the reconcile sweep drops. */\nexport const actionFunctionName = (actionName: string): string => `action_${actionName}`\n\n/**\n * A returns action's final statement, re-projected into the declared `returns`\n * order by column name. `RETURN QUERY` binds the row's columns to the RETURNS\n * TABLE out-params positionally, so trusting the author's RETURNING order would\n * mislabel columns; wrapping in a CTE and selecting the declared names binds by\n * name instead — order-independent, and works with an explicit RETURNING list or\n * `RETURNING *`. PREPARE runs this same form so a declared column the RETURNING\n * doesn't produce fails the apply.\n */\nfunction returnProjection(returns: NonNullable<ActionDefinition['returns']>, lastStatement: string): string {\n const projection = Object.keys(returns).map(quoteIdentifier).join(', ')\n return `WITH orm_returning AS (${lastStatement}) SELECT ${projection} FROM orm_returning`\n}\n\ninterface NamedAction {\n readonly name: string\n readonly action: ActionDefinition\n}\n\nconst allActions = (definition: NamespaceDefinition): NamedAction[] =>\n definition.tables\n .flatMap((table) => Object.entries(table.actions ?? {}).map(([name, action]) => ({ name, action })))\n .sort((a, b) => a.name.localeCompare(b.name))\n\n/**\n * Every declared action becomes a `SECURITY INVOKER` Postgres function, so the\n * apply-time `CREATE FUNCTION` is where Postgres validates the SQL (with\n * `check_function_bodies` on, a bad column/table reference fails the apply and\n * the action never goes live) and the invoke path is a single `SELECT fn(...)`\n * under the consumer role — no client-side statement rewriting at call time.\n *\n * Actions carry no data and are absent from the drizzle snapshot, so instead\n * of diffing them we reconcile: a leading sweep drops every `action_*` function\n * in the schema (clearing removed/renamed/retyped ones — a signature change\n * can't `CREATE OR REPLACE`), then each current action is created fresh. Runs\n * last in the plan because the bodies reference tables the earlier DDL creates.\n */\nexport function actionFunctionStatements(definition: NamespaceDefinition): string[] {\n const schema = ormSchemaName(definition.namespace)\n return [dropAllActionFunctions(schema), ...allActions(definition).flatMap(({ name, action }) => createActionFunction(definition, name, action))]\n}\n\n/**\n * PREPARE each action's executes at apply so Postgres parses and plans it\n * against the live schema — catching unknown columns/tables/types that a\n * plpgsql function body does NOT check at CREATE (it defers to first invoke).\n * A failed PREPARE aborts the apply, so a broken action never goes live. Runs\n * on the migration connection with the namespace on search_path; the prepared\n * statements die with that connection, so no DEALLOCATE is needed.\n */\nexport function actionPrepareChecks(definition: NamespaceDefinition): string[] {\n const actions = allActions(definition)\n if (actions.length === 0) return []\n const statements = [`SET LOCAL search_path TO ${quoteIdentifier(ormSchemaName(definition.namespace))}`]\n for (const { name, action } of actions) {\n const order = actionParamOrder(action)\n const signature = order.length > 0 ? ` (${order.map((param) => sqlTypeName(action.params![param]!.type)).join(', ')})` : ''\n const compiled = compileActionStatements(action, (param) => `$${order.indexOf(param) + 1}`)\n compiled.forEach((sql, index) => {\n // The last statement of a returns action is prepared through the same\n // re-projection the function uses, so a declared column its RETURNING\n // omits fails here at apply, not at first invoke.\n const checked = action.returns && index === compiled.length - 1 ? returnProjection(action.returns, sql) : sql\n statements.push(`PREPARE ${quoteIdentifier(`orm_check_${name}_${index}`)}${signature} AS ${checked}`)\n })\n }\n return statements\n}\n\n/**\n * Drop every `action_*` function in the namespace schema before recreating the\n * current set. The schema holds only ORM-created objects, so the prefix match\n * is exact enough; `\\_` escapes the underscore so it can't widen to `actionX`.\n */\nfunction dropAllActionFunctions(schema: string): string {\n return `DO $orm_reconcile_actions$\nDECLARE\n r record;\nBEGIN\n FOR r IN\n SELECT p.oid::regprocedure AS sig\n FROM pg_catalog.pg_proc p\n JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace\n WHERE n.nspname = ${quoteLiteral(schema)} AND p.proname LIKE 'action\\\\_%'\n LOOP\n EXECUTE 'DROP FUNCTION ' || r.sig;\n END LOOP;\nEND\n$orm_reconcile_actions$`\n}\n\nfunction createActionFunction(definition: NamespaceDefinition, name: string, action: ActionDefinition): string[] {\n const schema = quoteIdentifier(ormSchemaName(definition.namespace))\n const fn = `${schema}.${quoteIdentifier(actionFunctionName(name))}`\n const order = actionParamOrder(action)\n const signature = order\n .map((paramName) => `${quoteIdentifier(actionParamArg(paramName))} ${sqlTypeName(action.params![paramName]!.type)}`)\n .join(', ')\n const argTypes = order.map((paramName) => sqlTypeName(action.params![paramName]!.type)).join(', ')\n const role = quoteIdentifier(consumerRoleName(definition.namespace))\n\n // The executes statements run in order; the last one carries the result —\n // its RETURNING for a returns action, its ROW_COUNT for a count action.\n const statements = compileActionStatements(action)\n const last = statements[statements.length - 1] as string\n const leading = statements.slice(0, -1).map((statement) => ` ${statement};`)\n const create = action.returns\n ? // RETURNS TABLE + RETURN QUERY over the declared-order re-projection.\n `CREATE FUNCTION ${fn}(${signature})\nRETURNS TABLE(${Object.entries(action.returns)\n .map(([column, type]) => `${quoteIdentifier(column)} ${sqlTypeName(type)}`)\n .join(', ')})\nLANGUAGE plpgsql\nSECURITY INVOKER\nSET search_path = ${schema}\nAS $orm_action$\n-- RETURNS TABLE names OUT params (id, …) that collide with the re-projection's\n-- columns; resolve unqualified names to the column.\n#variable_conflict use_column\nBEGIN\n${[functionGuards(definition, name, action), ...leading, ` RETURN QUERY ${returnProjection(action.returns, last)};`].filter(Boolean).join('\\n')}\nEND\n$orm_action$`\n : // No returns: report the last statement's affected count.\n `CREATE FUNCTION ${fn}(${signature})\nRETURNS bigint\nLANGUAGE plpgsql\nSECURITY INVOKER\nSET search_path = ${schema}\nAS $orm_action$\nDECLARE\n v_count bigint;\nBEGIN\n${[functionGuards(definition, name, action), ...leading, ` ${last};`].filter(Boolean).join('\\n')}\n GET DIAGNOSTICS v_count = ROW_COUNT;\n RETURN v_count;\nEND\n$orm_action$`\n\n // Least privilege: only the namespace consumer role (what the executor\n // SET LOCAL ROLEs into) may invoke; the body still runs INVOKER, so RLS\n // and WITH CHECK bind it exactly as a direct statement would.\n return [\n create,\n `REVOKE ALL ON FUNCTION ${fn}(${argTypes}) FROM PUBLIC`,\n `GRANT EXECUTE ON FUNCTION ${fn}(${argTypes}) TO ${role}`,\n ]\n}\n\n/** The requires gate + validates probes that precede the mutation, in that order. */\nfunction functionGuards(definition: NamespaceDefinition, name: string, action: ActionDefinition): string {\n const lines: string[] = []\n\n const requires = compileActionRequires(action)\n if (requires) {\n // An unauthorized caller must be rejected before any validates probe can\n // leak valid-vs-invalid ids.\n lines.push(\n ` IF NOT (${requires}) THEN`,\n ` RAISE EXCEPTION 'action ${name} requires a grant the caller does not hold' USING ERRCODE = ${quoteLiteral(ACTION_REQUIRES_DENIED_SQLSTATE)};`,\n ` END IF;`,\n )\n }\n\n for (const entry of action.validates ?? []) {\n const { schema, table, key } = resolveValidatesTarget(definition, entry)\n const arg = quoteIdentifier(actionParamArg(entry.param))\n // Omitted/null optional params skip the check; FOR SHARE holds the row so\n // the soft link can't dangle before commit. RLS scopes the probe to what\n // the caller may see — the FK-like semantic, no cross-row oracle.\n lines.push(\n ` IF ${arg} IS NOT NULL AND NOT EXISTS (SELECT 1 FROM ${quoteIdentifier(schema)}.${quoteIdentifier(table)} WHERE ${quoteIdentifier(key)} = ${arg} FOR SHARE) THEN`,\n ` RAISE EXCEPTION 'validates failed: no ${entry.table} row for ${entry.param}' USING ERRCODE = ${quoteLiteral(ACTION_VALIDATES_FAILED_SQLSTATE)};`,\n ` END IF;`,\n )\n }\n\n return lines.join('\\n')\n}\n\nfunction resolveValidatesTarget(\n definition: NamespaceDefinition,\n entry: ValidatesEntry,\n): { schema: string; table: string; key: string } {\n if (entry.table.includes('.')) {\n const [schema, table] = entry.table.split('.') as [string, string]\n return { schema, table, key: 'id' }\n }\n const target = definition.tables.find((table) => table.table === entry.table)\n const key = target && Object.entries(target.columns ?? {}).find(([, column]) => column.primary_key)?.[0]\n if (!target || !key) {\n // buildNamespaceDefinition already rejects unknown and synced targets, so\n // this is a belt for a target reachable only through a direct compile.\n throw new OrmDefinitionError(`action validates target '${entry.table}' is not a local table with a primary key`)\n }\n return { schema: ormSchemaName(definition.namespace), table: entry.table, key }\n}\n","import { z } from 'zod'\nimport {\n MAX_IDENTIFIER_LENGTH,\n RESERVED_COLUMN_NAMES,\n RESERVED_TABLE_NAMES,\n SYNCED_SOURCE_PATTERN,\n} from '../constants.js'\nimport { referencedColumns, walkPredicate, type Operand } from '../predicate/ast.js'\nimport { actionSchema } from './actions.js'\nimport { castParts, columnSchema, type ColumnType } from './columns.js'\nimport { identifierSchema, namespaceSchema, tableReferenceSchema } from './identifiers.js'\nimport { parsedPredicateSchema } from './predicates.js'\n\nconst linkSchema = z.strictObject({\n to: tableReferenceSchema,\n on: identifierSchema,\n enforce: z.boolean().optional(),\n description: z.string().optional(),\n})\n\n// No column-count or index-count caps — Postgres's own INDEX_MAX_KEYS is the\n// authority and CREATE INDEX fails loudly past it.\nconst indexSchema = z\n .union([\n z.array(identifierSchema).min(1),\n z.strictObject({\n columns: z.array(identifierSchema).min(1),\n unique: z.boolean().optional(),\n name: identifierSchema.optional(),\n }),\n ])\n .transform((index) => (Array.isArray(index) ? { columns: index } : index))\n\nconst policiesSchema = z.strictObject({\n read: parsedPredicateSchema.optional(),\n write: parsedPredicateSchema.optional(),\n})\n\nexport const tableFileSchema = z\n .strictObject({\n namespace: namespaceSchema,\n table: identifierSchema,\n description: z.string().optional(),\n columns: z.record(identifierSchema, columnSchema).optional(),\n source: z.string().regex(SYNCED_SOURCE_PATTERN, 'source must reference a gold-layer table').optional(),\n links: z.record(identifierSchema, linkSchema).optional(),\n indexes: z.array(indexSchema).optional(),\n policies: policiesSchema.optional(),\n actions: z.record(identifierSchema, actionSchema).optional(),\n })\n .superRefine((table, ctx) => {\n if (RESERVED_TABLE_NAMES.has(table.table)) {\n ctx.addIssue({ code: 'custom', message: `'${table.table}' is a reserved table name`, path: ['table'] })\n }\n for (const name of Object.keys(table.columns ?? {})) {\n if (RESERVED_COLUMN_NAMES.has(name)) {\n ctx.addIssue({\n code: 'custom',\n message: `column '${name}' collides with the Data API's reserved query parameters (select, order, limit, offset) — it could never be filtered`,\n path: ['columns', name],\n })\n }\n }\n if (table.source) validateSyncedTable(table, ctx)\n else validateColumnTable(table, ctx)\n validateLinks(table, ctx)\n validatePolicyColumns(table, ctx)\n validateDerivedNameLengths(table, ctx)\n })\n\nexport type TableFile = z.output<typeof tableFileSchema>\nexport type LinkDefinition = z.output<typeof linkSchema>\nexport type IndexDefinition = z.output<typeof indexSchema>\n\n/** The physical index name — explicit, or derived from table + columns. One formula for the builder and the namespace-wide uniqueness check. */\nexport const indexName = (table: string, definition: IndexDefinition): string =>\n definition.name ?? `ix_${table}_${definition.columns.join('_')}`\n\n/** Row-policy name the security pass owns per table — `<table>_<suffix>`. One formula for the emitter and the load-time length check. */\nexport const policyName = (table: string, suffix: string): string => `${table}_${suffix}`\n\n/** Enforced-link FK constraint name — one formula for the engine builder and the load-time length check. */\nexport const foreignKeyName = (table: string, link: string): string => `fk_${table}_${link}`\n\ntype RefineCtx = { addIssue: (issue: { code: 'custom'; message: string; path?: (string | number)[] }) => void }\n\nfunction validateSyncedTable(table: TableFile, ctx: RefineCtx): void {\n const forbidden: Array<[keyof TableFile, string]> = [\n ['columns', 'synced tables reflect their source; columns are not declared'],\n ['actions', 'synced tables are read-only; actions are not allowed'],\n ['indexes', 'synced tables are system-owned; indexes are not allowed'],\n ]\n for (const [field, message] of forbidden) {\n if (table[field] !== undefined) ctx.addIssue({ code: 'custom', message, path: [field] })\n }\n if (table.policies?.write) {\n ctx.addIssue({ code: 'custom', message: 'synced tables are read-only', path: ['policies', 'write'] })\n }\n}\n\nfunction validateRenames(\n columns: NonNullable<TableFile['columns']>,\n names: readonly string[],\n ctx: RefineCtx,\n): void {\n const renameSources = new Map<string, string>()\n for (const name of names) {\n const renamedFrom = columns[name]?.renamed_from\n if (!renamedFrom) continue\n if (renamedFrom === name || names.includes(renamedFrom)) {\n ctx.addIssue({\n code: 'custom',\n message: 'renamed_from must name a column that no longer exists',\n path: ['columns', name, 'renamed_from'],\n })\n }\n // Two columns claiming the same source would make the rename migration ambiguous.\n const claimed = renameSources.get(renamedFrom)\n if (claimed) {\n ctx.addIssue({\n code: 'custom',\n message: `renamed_from '${renamedFrom}' is already claimed by '${claimed}'`,\n path: ['columns', name, 'renamed_from'],\n })\n }\n renameSources.set(renamedFrom, name)\n }\n}\n\nfunction validateColumnTable(table: TableFile, ctx: RefineCtx): void {\n const columns = table.columns ?? {}\n const names = Object.keys(columns)\n if (names.length === 0) {\n ctx.addIssue({ code: 'custom', message: 'a table must declare columns or a source', path: ['columns'] })\n return\n }\n\n const primaryKeys = names.filter((name) => columns[name]?.primary_key)\n if (primaryKeys.length !== 1) {\n ctx.addIssue({ code: 'custom', message: 'exactly one column must be primary_key', path: ['columns'] })\n }\n\n validateRenames(columns, names, ctx)\n for (const name of names) {\n const column = columns[name]\n if (!column) continue\n const cast = column.cast ? castParts(column.cast) : null\n if (column.cast && cast?.column !== name) {\n ctx.addIssue({\n code: 'custom',\n message: 'cast must reference the column it is declared on',\n path: ['columns', name, 'cast'],\n })\n }\n if (cast && cast.type !== column.type) {\n ctx.addIssue({\n code: 'custom',\n message: `cast target '${cast.type}' must match the declared type '${column.type}'`,\n path: ['columns', name, 'cast'],\n })\n }\n }\n\n for (const [position, index] of (table.indexes ?? []).entries()) {\n if (new Set(index.columns).size !== index.columns.length) {\n ctx.addIssue({\n code: 'custom',\n message: 'index names a column more than once',\n path: ['indexes', position],\n })\n }\n for (const column of index.columns) {\n if (!names.includes(column)) {\n ctx.addIssue({\n code: 'custom',\n message: `index references unknown column '${column}'`,\n path: ['indexes', position],\n })\n }\n }\n }\n}\n\nfunction validateLinks(table: TableFile, ctx: RefineCtx): void {\n const columnNames = Object.keys(table.columns ?? {})\n for (const [name, link] of Object.entries(table.links ?? {})) {\n if (!table.source && !columnNames.includes(link.on)) {\n ctx.addIssue({ code: 'custom', message: `link references unknown column '${link.on}'`, path: ['links', name, 'on'] })\n }\n if (link.enforce && link.to.includes('.')) {\n ctx.addIssue({\n code: 'custom',\n message: 'enforce is only valid for links inside the namespace; cross-boundary links stay soft',\n path: ['links', name, 'enforce'],\n })\n }\n if (link.enforce && table.source) {\n ctx.addIssue({\n code: 'custom',\n message: 'a synced table cannot enforce foreign keys — its DDL is owned by the sync',\n path: ['links', name, 'enforce'],\n })\n }\n }\n}\n\n/**\n * Postgres silently truncates identifiers past 63 bytes, so an over-long\n * derived name would collide or drift from what the engine thinks it created.\n * Fail at load instead. Explicit names are already capped by identifierSchema;\n * only the derived formulas can overflow.\n */\nfunction validateDerivedNameLengths(table: TableFile, ctx: RefineCtx): void {\n const worstPolicy = policyName(table.table, 'insert')\n if (!table.source && worstPolicy.length > MAX_IDENTIFIER_LENGTH) {\n ctx.addIssue({\n code: 'custom',\n message: `table name is too long — the derived policy name '${worstPolicy}' exceeds Postgres's ${MAX_IDENTIFIER_LENGTH}-byte identifier limit`,\n path: ['table'],\n })\n }\n for (const [position, index] of (table.indexes ?? []).entries()) {\n const name = indexName(table.table, index)\n if (name.length > MAX_IDENTIFIER_LENGTH) {\n ctx.addIssue({\n code: 'custom',\n message: `derived index name '${name}' exceeds Postgres's ${MAX_IDENTIFIER_LENGTH}-byte identifier limit — set a shorter explicit name`,\n path: ['indexes', position],\n })\n }\n }\n for (const [name, link] of Object.entries(table.links ?? {})) {\n const constraint = foreignKeyName(table.table, name)\n if (link.enforce && constraint.length > MAX_IDENTIFIER_LENGTH) {\n ctx.addIssue({\n code: 'custom',\n message: `derived foreign-key name '${constraint}' exceeds Postgres's ${MAX_IDENTIFIER_LENGTH}-byte identifier limit — shorten the link or table name`,\n path: ['links', name],\n })\n }\n }\n for (const name of Object.keys(table.actions ?? {})) {\n // Each action compiles to an `action_<name>` Postgres function.\n const fnName = `action_${name}`\n if (fnName.length > MAX_IDENTIFIER_LENGTH) {\n ctx.addIssue({\n code: 'custom',\n message: `derived action function name '${fnName}' exceeds Postgres's ${MAX_IDENTIFIER_LENGTH}-byte identifier limit — shorten the action name`,\n path: ['actions', name],\n })\n }\n }\n}\n\n/** Comparability groups — Postgres compares freely within a group, errors across them. One helper shared with link/param checks. */\nconst TYPE_GROUPS: Readonly<Record<ColumnType, 'numeric' | 'text' | 'uuid' | 'temporal' | 'boolean' | 'jsonb'>> = {\n integer: 'numeric',\n bigint: 'numeric',\n numeric: 'numeric',\n double: 'numeric',\n text: 'text',\n uuid: 'uuid',\n date: 'temporal',\n timestamptz: 'temporal',\n boolean: 'boolean',\n jsonb: 'jsonb',\n}\n\nexport const columnTypeGroup = (type: ColumnType): string => TYPE_GROUPS[type]\n\nfunction validatePolicyColumns(table: TableFile, ctx: RefineCtx): void {\n if (table.source) return\n const columns = table.columns ?? {}\n const columnNames = Object.keys(columns)\n for (const kind of ['read', 'write'] as const) {\n const predicate = table.policies?.[kind]\n if (!predicate) continue\n for (const column of referencedColumns(predicate.ast)) {\n if (!columnNames.includes(column)) {\n ctx.addIssue({\n code: 'custom',\n message: `policy references unknown column '${column}'`,\n path: ['policies', kind],\n })\n }\n }\n walkPredicate(predicate.ast, (node) => {\n if (node.kind !== 'compare') return\n const issue = comparisonTypeIssue(node.left, node.right, columns)\n if (issue) ctx.addIssue({ code: 'custom', message: issue, path: ['policies', kind] })\n })\n }\n}\n\n/**\n * A comparison that can never type-check in Postgres fails at load, not at\n * CREATE POLICY. Claims are exempt — the compiler casts them to the column's\n * declared type — and NULL literals compile to IS [NOT] NULL.\n */\nfunction comparisonTypeIssue(\n left: Operand,\n right: Operand,\n columns: NonNullable<TableFile['columns']>,\n): string | null {\n const groupOf = (operand: Operand): string | null =>\n operand.kind === 'column' ? (columns[operand.name] ? TYPE_GROUPS[columns[operand.name]!.type] : null) : null\n\n if (left.kind === 'column' && right.kind === 'column') {\n const leftGroup = groupOf(left)\n const rightGroup = groupOf(right)\n if (leftGroup && rightGroup && leftGroup !== rightGroup) {\n return `policy compares '${left.name}' (${columns[left.name]!.type}) with '${right.name}' (${columns[right.name]!.type}) — incomparable types`\n }\n return null\n }\n\n const column = left.kind === 'column' ? left : right.kind === 'column' ? right : null\n const literal = left.kind === 'literal' ? left : right.kind === 'literal' ? right : null\n if (!column || !literal || literal.value === null) return null\n const columnGroup = groupOf(column)\n if (!columnGroup) return null\n // Quoted literals are unknown-typed and coerce through the column's input\n // function, whose grammar is richer than any client-side mirror ('+1',\n // '.5', 'NaN', PG16 digit separators, uuid brace forms, boolean prefixes).\n // A malformed value fails loudly at apply — never falsely rejected here.\n if (typeof literal.value === 'string') return null\n const literalGroup = typeof literal.value === 'number' ? 'numeric' : 'boolean'\n if (literalGroup !== columnGroup) {\n return `policy compares '${column.name}' (${columns[column.name]!.type}) with a ${typeof literal.value} literal — incomparable types`\n }\n return null\n}\n","import { consumerRoleName, ormSchemaName } from '../constants.js'\nimport { compilePredicate } from '../compiler/predicates.js'\nimport { quoteIdentifier } from '../compiler/sql.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport { policyName as derivePolicyName, type TableFile } from '../schema/table.js'\n\nexport const CONSUMER_TABLE_PRIVILEGES = ['SELECT', 'INSERT', 'UPDATE', 'DELETE'] as const\n\n/**\n * Policy names we own per table. `write` is the legacy single-policy name —\n * dropped on every apply so pre-split schemas converge.\n */\nconst POLICY_SUFFIXES = ['read', 'insert', 'update', 'delete', 'write'] as const\n\n/**\n * The security statements the kit never sees — FORCE row security (so\n * policies bind the table owner too), the row policies themselves, and the\n * grants that let the Data API's consumer role reach the namespace.\n *\n * Policies deliberately bypass drizzle-kit's diff: its API resolves\n * create+drop pairs interactively (fatal in a service), and they are cheap\n * and fully determined by the definition — so every apply drops and\n * recreates them. Writes compile to command-scoped policies, never FOR ALL:\n * permissive policies OR together, so an all-commands policy would let\n * write-capable callers SELECT rows the read policy hides.\n */\nexport function securityStatements(definition: NamespaceDefinition): string[] {\n const schema = quoteIdentifier(ormSchemaName(definition.namespace))\n const role = quoteIdentifier(consumerRoleName(definition.namespace))\n const tables = columnTables(definition)\n\n const force = tables.map(\n (table) => `ALTER TABLE ${schema}.${quoteIdentifier(table.table)} FORCE ROW LEVEL SECURITY`,\n )\n const policies = tables.flatMap((table) => policyStatements(schema, table))\n const grants = tables.map(\n (table) =>\n `GRANT ${CONSUMER_TABLE_PRIVILEGES.join(', ')} ON ${schema}.${quoteIdentifier(table.table)} TO ${role}`,\n )\n return [...force, ...policies, `GRANT USAGE ON SCHEMA ${schema} TO ${role}`, ...grants]\n}\n\n/**\n * Drop every owned policy on the given (already existing) tables. Runs before\n * hints and DDL so a column referenced by an installed policy can be cast or\n * dropped — Postgres refuses to alter a column a live policy depends on.\n */\nexport function policyDropStatements(schemaName: string, tables: readonly string[]): string[] {\n const schema = quoteIdentifier(schemaName)\n return tables.flatMap((table) =>\n POLICY_SUFFIXES.map(\n (suffix) => `DROP POLICY IF EXISTS ${quoteIdentifier(derivePolicyName(table, suffix))} ON ${schema}.${quoteIdentifier(table)}`,\n ),\n )\n}\n\nfunction policyStatements(schema: string, table: TableFile): string[] {\n const qualified = `${schema}.${quoteIdentifier(table.table)}`\n const policyName = (suffix: string) => quoteIdentifier(derivePolicyName(table.table, suffix))\n const statements = POLICY_SUFFIXES.map((suffix) => `DROP POLICY IF EXISTS ${policyName(suffix)} ON ${qualified}`)\n const columnTypes = Object.fromEntries(\n Object.entries(table.columns ?? {}).map(([name, column]) => [name, column.type]),\n )\n\n const read = table.policies?.read\n if (read) {\n statements.push(`CREATE POLICY ${policyName('read')} ON ${qualified} FOR SELECT USING (${compilePredicate(read.ast, columnTypes)})`)\n }\n const write = table.policies?.write\n if (write) {\n const predicate = compilePredicate(write.ast, columnTypes)\n statements.push(`CREATE POLICY ${policyName('insert')} ON ${qualified} FOR INSERT WITH CHECK (${predicate})`)\n statements.push(\n `CREATE POLICY ${policyName('update')} ON ${qualified} FOR UPDATE USING (${predicate}) WITH CHECK (${predicate})`,\n )\n statements.push(`CREATE POLICY ${policyName('delete')} ON ${qualified} FOR DELETE USING (${predicate})`)\n }\n return statements\n}\n\nexport const columnTables = (definition: NamespaceDefinition): TableFile[] =>\n definition.tables.filter((table) => !table.source)\n","import { sql } from 'drizzle-orm'\nimport {\n bigint,\n boolean,\n date,\n doublePrecision,\n integer,\n jsonb,\n numeric,\n text,\n timestamp,\n uuid,\n} from 'drizzle-orm/pg-core'\nimport { isFunctionDefault, type ColumnDefinition, type ColumnType } from '../schema/columns.js'\n\ntype ColumnFactory = (name: string) => ColumnBuilder\n\ninterface ColumnBuilder {\n primaryKey(): ColumnBuilder\n notNull(): ColumnBuilder\n unique(): ColumnBuilder\n default(value: unknown): ColumnBuilder\n}\n\nconst FACTORIES: Readonly<Record<ColumnType, ColumnFactory>> = {\n uuid: (name) => uuid(name),\n text: (name) => text(name),\n integer: (name) => integer(name),\n // Mode 'bigint' keeps int8 lossless — mode 'number' silently rounds past\n // 2^53. The read executor serializes BigInt to string for JSON.\n bigint: (name) => bigint(name, { mode: 'bigint' }),\n numeric: (name) => numeric(name),\n double: (name) => doublePrecision(name),\n boolean: (name) => boolean(name),\n timestamptz: (name) => timestamp(name, { withTimezone: true }),\n date: (name) => date(name),\n jsonb: (name) => jsonb(name),\n}\n\nexport function buildColumn(name: string, definition: ColumnDefinition): unknown {\n let column = FACTORIES[definition.type](name)\n if (definition.primary_key) column = column.primaryKey()\n if (definition.nullable === false && !definition.primary_key) column = column.notNull()\n if (definition.unique && !definition.primary_key) column = column.unique()\n if (definition.default !== undefined) {\n const value = definition.default\n // Only the schema's exact function allowlist becomes raw SQL — a text\n // literal that happens to end in parentheses is data, never code.\n column = column.default(\n typeof value === 'string' && isFunctionDefault(value, definition.type) ? sql.raw(value) : value,\n )\n }\n return column\n}\n","import { foreignKey, index, pgSchema, uniqueIndex, type PgTableWithColumns } from 'drizzle-orm/pg-core'\nimport { ormSchemaName } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { isQualifiedReference } from '../schema/identifiers.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport type { TableFile } from '../schema/table.js'\nimport { foreignKeyName, indexName } from '../schema/table.js'\nimport { buildColumn } from './columns.js'\nimport { columnTables } from './security.js'\n\nexport interface DrizzleEntities {\n /** The in-memory schema bag drizzle-kit snapshots (`generateDrizzleJson(imports)`). */\n readonly imports: Record<string, unknown>\n /** Tables by definition name — the typed handles query execution uses. */\n readonly tables: Record<string, PgTableWithColumns<never>>\n readonly schemaName: string\n}\n\n/** Table names share the imports bag with the schema entity — keep the schema key un-collidable ('$' can't appear in an identifier). */\nconst SCHEMA_IMPORT_KEY = '$schema'\n\n/**\n * Definitions → runtime Drizzle entities. Tables build in dependency order so\n * enforced links can reference their target's built column; policies attach in\n * the table's extras with predicates compiled from the parsed AST — raw policy\n * text never reaches SQL. Tables without policies stay RLS-enabled: default deny.\n */\nexport function buildDrizzleEntities(definition: NamespaceDefinition): DrizzleEntities {\n const schemaName = ormSchemaName(definition.namespace)\n const schema = pgSchema(schemaName)\n const imports: Record<string, unknown> = { [SCHEMA_IMPORT_KEY]: schema }\n const tables: Record<string, PgTableWithColumns<never>> = {}\n const built = new Map<string, Record<string, unknown>>()\n\n for (const table of sortByEnforcedLinks(columnTables(definition))) {\n const drizzleTable = buildTable(schema, table, built)\n built.set(table.table, drizzleTable as Record<string, unknown>)\n imports[table.table] = drizzleTable\n // enableRLS() returns Omit<..., 'enableRLS'>, which no longer overlaps\n // the columns generic — the double cast is the drizzle-typed escape hatch.\n tables[table.table] = drizzleTable as unknown as PgTableWithColumns<never>\n }\n return { imports, tables, schemaName }\n}\n\nfunction buildTable(\n schema: ReturnType<typeof pgSchema>,\n table: TableFile,\n built: ReadonlyMap<string, Record<string, unknown>>,\n) {\n const columns = Object.fromEntries(\n Object.entries(table.columns ?? {}).map(([name, column]) => [name, buildColumn(name, column)]),\n )\n\n const drizzleTable = schema.table(table.table, columns as never, (self: Record<string, unknown>) => [\n ...buildIndexes(table, self),\n ...buildForeignKeys(table, self, built),\n ])\n // Every table is RLS-enabled; the policies themselves are emitted by the\n // security pass (never through the kit diff — see security.ts).\n return drizzleTable.enableRLS()\n}\n\nfunction buildIndexes(table: TableFile, self: Record<string, unknown>) {\n return (table.indexes ?? []).map((definition) => {\n const name = indexName(table.table, definition)\n const factory = definition.unique ? uniqueIndex(name) : index(name)\n const columns = definition.columns.map((column) => self[column])\n return factory.on(...(columns as [never, ...never[]]))\n })\n}\n\nfunction buildForeignKeys(\n table: TableFile,\n self: Record<string, unknown>,\n built: ReadonlyMap<string, Record<string, unknown>>,\n) {\n return Object.entries(table.links ?? {})\n .filter(([, link]) => link.enforce)\n .map(([name, link]) => {\n // A self-referential link (parent_id hierarchy) resolves against the\n // table's own columns — it is never in `built` while being built.\n const target = link.to === table.table ? self : built.get(link.to)\n const targetColumn = target && findPrimaryKeyColumn(target)\n if (!target || !targetColumn) {\n throw new OrmDefinitionError(`enforced link '${name}' on '${table.table}' has no built target '${link.to}'`)\n }\n return foreignKey({\n name: foreignKeyName(table.table, name),\n columns: [self[link.on]] as [never],\n foreignColumns: [targetColumn] as [never],\n })\n })\n}\n\nfunction findPrimaryKeyColumn(target: Record<string, unknown>): unknown {\n const columns = Object.values(target).filter(\n (value) => value !== null && typeof value === 'object' && 'primary' in (value as object),\n )\n return columns.find((column) => (column as { primary: boolean }).primary)\n}\n\n/** Targets of enforced links build first; cycles are a definition error. */\nfunction sortByEnforcedLinks(tables: readonly TableFile[]): TableFile[] {\n const remaining = new Map(tables.map((table) => [table.table, table]))\n const sorted: TableFile[] = []\n const placed = new Set<string>()\n\n while (remaining.size > 0) {\n const ready = [...remaining.values()].filter((table) =>\n enforcedTargets(table).every((target) => placed.has(target) || !remaining.has(target)),\n )\n if (ready.length === 0) {\n throw new OrmDefinitionError(`enforced links form a cycle among: ${[...remaining.keys()].join(', ')}`)\n }\n for (const table of ready) {\n sorted.push(table)\n placed.add(table.table)\n remaining.delete(table.table)\n }\n }\n return sorted\n}\n\nconst enforcedTargets = (table: TableFile): string[] =>\n Object.values(table.links ?? {})\n // A self-target is not an ordering dependency — the FK builds inline.\n .filter((link) => link.enforce && !isQualifiedReference(link.to) && link.to !== table.table)\n .map((link) => link.to)\n","import { generateDrizzleJson, generateMigration, upPgSnapshot } from 'drizzle-kit/api'\nimport { ormSchemaName } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { quoteIdentifier } from '../compiler/sql.js'\nimport { castParts } from '../schema/columns.js'\nimport { sqlTypeName } from './types.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport { buildDrizzleEntities } from './tables.js'\nimport { columnTables } from './security.js'\n\n/** drizzle-kit's serialized schema — the diff/replay artifact the registry stores. */\nexport type NamespaceSnapshot = ReturnType<typeof generateDrizzleJson>\n\ninterface SnapshotColumn {\n name: string\n type: string\n [key: string]: unknown\n}\n\ninterface SnapshotTable {\n name: string\n schema: string\n columns: Record<string, SnapshotColumn>\n [key: string]: unknown\n}\n\nexport function generateSnapshot(definition: NamespaceDefinition, previousId?: string): NamespaceSnapshot {\n const { imports, schemaName } = buildDrizzleEntities(definition)\n return generateDrizzleJson(imports, previousId, [schemaName])\n}\n\nexport const emptySnapshot = (namespace: string): NamespaceSnapshot =>\n generateDrizzleJson({}, undefined, [ormSchemaName(namespace)])\n\nconst CURRENT_SNAPSHOT_VERSION = (generateDrizzleJson({}) as { version: string }).version\n\n/**\n * Persisted snapshots (registry version rows, committed migrations/meta)\n * outlive drizzle-kit upgrades. `upPgSnapshot` migrates older snapshot\n * formats to the kit's current one; a snapshot that still isn't current\n * after upgrading came from a NEWER kit than this one — fail loudly rather\n * than let the diff silently misread it.\n */\nexport function normalizeSnapshot(snapshot: NamespaceSnapshot): NamespaceSnapshot {\n const upgraded = upPgSnapshot(snapshot as Record<string, unknown>) as NamespaceSnapshot\n const version = (upgraded as { version?: unknown }).version\n if (version !== CURRENT_SNAPSHOT_VERSION) {\n throw new OrmDefinitionError(\n `snapshot format '${String(version)}' is not supported by this drizzle-kit (expected '${CURRENT_SNAPSHOT_VERSION}') — upgrade @sequenceholdings/orm`,\n )\n }\n return upgraded\n}\n\nexport function diffStatements(previous: NamespaceSnapshot, current: NamespaceSnapshot): Promise<string[]> {\n assertUnambiguousDiff(previous, current)\n return generateMigration(previous as never, current as never)\n}\n\n/**\n * drizzle-kit resolves a simultaneous add + drop by PROMPTING (\"did you\n * rename X to Y?\") — interactive hanji UI that hangs a terminal and throws\n * an opaque TTY error everywhere else. Renames are declared in the YAML\n * (`renamed_from`, applied as hints before the diff), so any add+drop pair\n * reaching the kit is either an undeclared rename or two changes bundled\n * into one — refuse both with an actionable message.\n */\nfunction assertUnambiguousDiff(previous: NamespaceSnapshot, current: NamespaceSnapshot): void {\n const previousTables = tablesOf(previous)\n const currentTables = tablesOf(current)\n\n const removedTables = [...previousTables.keys()].filter((name) => !currentTables.has(name))\n const addedTables = [...currentTables.keys()].filter((name) => !previousTables.has(name))\n if (removedTables.length > 0 && addedTables.length > 0) {\n throw new OrmDefinitionError(\n `ambiguous diff: table(s) added (${addedTables.join(', ')}) and removed (${removedTables.join(', ')}) in the same change — ship the add and the drop as separate changes`,\n )\n }\n\n for (const [name, previousColumns] of previousTables) {\n const currentColumns = currentTables.get(name)\n if (!currentColumns) continue\n const removed = [...previousColumns].filter((column) => !currentColumns.has(column))\n const added = [...currentColumns].filter((column) => !previousColumns.has(column))\n if (removed.length > 0 && added.length > 0) {\n throw new OrmDefinitionError(\n `ambiguous diff on '${name}': column(s) added (${added.join(', ')}) and removed (${removed.join(', ')}) in the same change — declare \\`renamed_from\\` for a rename, or ship the add and the drop as separate changes`,\n )\n }\n }\n}\n\nfunction tablesOf(snapshot: NamespaceSnapshot): Map<string, Set<string>> {\n const tables = (snapshot as { tables?: Record<string, SnapshotTable> }).tables ?? {}\n return new Map(\n Object.values(tables).map((table) => [`${table.schema}.${table.name}`, new Set(Object.keys(table.columns))]),\n )\n}\n\nexport interface MigrationHints {\n /** ALTER RENAME / ALTER TYPE USING statements to run before the kit diff. */\n readonly statements: string[]\n /** Previous snapshot rewritten so the kit diff never sees the rename/cast. */\n readonly adjusted: NamespaceSnapshot\n}\n\n/**\n * Renames and casts are declared in the YAML, never inferred: we emit the\n * statement ourselves and rewrite the previous snapshot to match, so\n * drizzle-kit never faces a create+drop ambiguity (its API resolves those\n * interactively — fatal in a service).\n */\nexport function applyMigrationHints(previous: NamespaceSnapshot, definition: NamespaceDefinition): MigrationHints {\n const adjusted = structuredClone(previous) as NamespaceSnapshot\n const statements: string[] = []\n const schemaName = ormSchemaName(definition.namespace)\n const qualified = (table: string) => `${quoteIdentifier(schemaName)}.${quoteIdentifier(table)}`\n\n for (const table of columnTables(definition)) {\n const snapshotTable = findTable(adjusted, schemaName, table.table)\n if (!snapshotTable) continue\n\n for (const [name, column] of Object.entries(table.columns ?? {})) {\n if (column.renamed_from) {\n const previousColumn = snapshotTable.columns[column.renamed_from]\n if (previousColumn && snapshotTable.columns[name]) {\n // Both live: silently ignoring the hint would hand drizzle-kit the\n // source column as a plain drop — data loss the declaration was\n // meant to prevent.\n throw new OrmDefinitionError(\n `'${table.table}.${name}' declares renamed_from '${column.renamed_from}', but both columns exist in the previous schema — a rename cannot overwrite a live column`,\n )\n }\n if (previousColumn) {\n statements.push(\n `ALTER TABLE ${qualified(table.table)} RENAME COLUMN ${quoteIdentifier(column.renamed_from)} TO ${quoteIdentifier(name)}`,\n )\n delete snapshotTable.columns[column.renamed_from]\n snapshotTable.columns[name] = { ...previousColumn, name }\n } else if (!snapshotTable.columns[name]) {\n // Neither the declared source nor the destination exists in the\n // previous schema: a typo'd or stale renamed_from. Falling through\n // would hand drizzle-kit a drop/add diff — the exact ambiguity the\n // declaration exists to prevent — so fail with the declaration.\n throw new OrmDefinitionError(\n `'${table.table}.${name}' declares renamed_from '${column.renamed_from}', but the previous schema has neither column — check the declared source name`,\n )\n }\n }\n\n const cast = column.cast ? castParts(column.cast) : null\n if (cast) {\n const current = snapshotTable.columns[name]\n const targetType = sqlTypeName(column.type)\n if (current && current.type !== targetType) {\n statements.push(\n `ALTER TABLE ${qualified(table.table)} ALTER COLUMN ${quoteIdentifier(name)} TYPE ${targetType} USING ${quoteIdentifier(name)}::${targetType}`,\n )\n current.type = targetType\n }\n }\n }\n }\n return { statements, adjusted }\n}\n\nfunction findTable(snapshot: NamespaceSnapshot, schema: string, table: string): SnapshotTable | undefined {\n const tables = (snapshot as { tables?: Record<string, SnapshotTable> }).tables ?? {}\n return Object.values(tables).find((entry) => entry.schema === schema && entry.name === table)\n}\n\n/** Names of the tables a snapshot holds for one schema — the tables that exist before this plan runs. */\nexport function snapshotTableNames(snapshot: NamespaceSnapshot, schema: string): string[] {\n const tables = (snapshot as { tables?: Record<string, SnapshotTable> }).tables ?? {}\n return Object.values(tables)\n .filter((entry) => entry.schema === schema)\n .map((entry) => entry.name)\n}\n","import { pushSchema } from 'drizzle-kit/api'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport { buildDrizzleEntities } from './tables.js'\n\n/**\n * Statements the security pass owns — policies, RLS toggles, grants, roles,\n * and the synced views — deliberately live outside the kit's snapshots, so\n * the kit's introspection always \"wants\" to remove them. They are\n * deterministic drop+recreate on every apply (converged by construction)\n * and are excluded from the convergence verdict.\n *\n * Matched by the statement's LEADING command (or the multi-word `ROW LEVEL\n * SECURITY` phrase), never by a keyword appearing anywhere — otherwise a\n * legitimate kit statement for a user column named `role`/`grant`/`policy`\n * (`ALTER TABLE ... ADD COLUMN \"role\" ...`) would be misread as owned and\n * silently dropped from the verdict, letting a non-converged schema pass.\n */\nconst OWNED_STATEMENT = new RegExp(\n [\n String.raw`^\\s*(CREATE|DROP)\\s+POLICY\\b`,\n String.raw`^\\s*(GRANT|REVOKE)\\b`,\n String.raw`^\\s*(CREATE|DROP|ALTER)\\s+ROLE\\b`,\n String.raw`^\\s*(CREATE|DROP)\\s+(OR\\s+REPLACE\\s+)?VIEW\\b`,\n // Only ever appears in an RLS toggle (ALTER TABLE … [ENABLE|FORCE] ROW LEVEL\n // SECURITY) — a three-word phrase, never an identifier.\n String.raw`\\bROW LEVEL SECURITY\\b`,\n ].join('|'),\n 'i',\n)\n\n/**\n * Whether a kit-emitted statement is one the security pass owns (and so is\n * excluded from the convergence verdict). Exported for direct testing of the\n * classification, which is load-bearing: a false positive silently drops a real\n * pending statement and lets a non-converged schema pass.\n */\nexport function isOwnedStatement(statement: string): boolean {\n return OWNED_STATEMENT.test(statement)\n}\n\n/**\n * The kit-owned statements a live database would still need to match the\n * definition — drizzle-kit's `pushSchema` introspection diffed against the\n * built entities. Empty means the schema converged: what the rehearsal (or\n * any verification) uses as the introspect-level proof that executing the\n * plan actually produced the desired state, not merely that it didn't error.\n */\nexport async function pendingKitStatements({\n definition,\n db,\n}: {\n definition: NamespaceDefinition\n /** A drizzle PgDatabase over the target — typed loose because pushSchema's own parameter is `PgDatabase<any>`. */\n db: unknown\n}): Promise<string[]> {\n const { imports, schemaName } = buildDrizzleEntities(definition)\n const { statementsToExecute } = await withExitGuard(() =>\n pushSchema(imports, shimExecute(db) as never, [schemaName]),\n )\n return statementsToExecute.filter((statement) => !OWNED_STATEMENT.test(statement))\n}\n\ninterface ExecuteResult {\n rows?: unknown\n}\n\n/**\n * pushSchema reads `.rows` off `drizzleInstance.execute(...)` — the\n * node-postgres shape. The postgres-js driver returns the row array itself\n * (drizzle-orm#5293), so introspection dies on `undefined`. pushSchema uses\n * nothing but `execute`, so a two-line adapter covers both drivers.\n */\nfunction shimExecute(db: unknown): { execute: (query: unknown) => Promise<ExecuteResult> } {\n const execute = (db as { execute: (query: unknown) => Promise<unknown> }).execute.bind(db)\n return {\n execute: async (query) => {\n const result = await execute(query)\n if (result && typeof result === 'object' && 'rows' in result) return result as ExecuteResult\n return { rows: result }\n },\n }\n}\n\n/**\n * drizzle-kit 0.x handles some internal errors by printing and calling\n * `process.exit(1)` — inside a long-lived worker that kills the process\n * mid-run. Turn any exit attempt during the introspection into a normal\n * throw the caller's error handling can record.\n *\n * `process.exit` is process-global, and the inline rehearsal path runs in the\n * shared Atlas server process, so two concurrent guards could interleave their\n * patch/restore and leave the real `exit` swapped out (or restore it while\n * another introspection is still running). Serialize every guarded section on a\n * module-level promise chain so patch → run → restore is atomic.\n */\nlet exitGuardChain: Promise<unknown> = Promise.resolve()\n\nfunction withExitGuard<T>(run: () => Promise<T>): Promise<T> {\n const next = exitGuardChain.then(() => guardedRun(run))\n // Keep the chain alive past a rejection so one failed introspection doesn't\n // wedge every later one.\n exitGuardChain = next.then(\n () => undefined,\n () => undefined,\n )\n return next\n}\n\nasync function guardedRun<T>(run: () => Promise<T>): Promise<T> {\n const originalExit = process.exit\n process.exit = ((code?: number) => {\n throw new Error(`drizzle-kit attempted process.exit(${code ?? 0}) during pushSchema introspection`)\n }) as never\n try {\n return await run()\n } finally {\n process.exit = originalExit\n }\n}\n","import { ormSchemaName } from '../constants.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport { actionFunctionStatements, actionPrepareChecks } from './actions.js'\nimport { policyDropStatements, securityStatements } from './security.js'\nimport {\n applyMigrationHints,\n diffStatements,\n emptySnapshot,\n generateSnapshot,\n normalizeSnapshot,\n snapshotTableNames,\n type NamespaceSnapshot,\n} from './snapshot.js'\n\nexport const STATEMENT_KINDS = ['hint', 'ddl', 'security', 'function'] as const\nexport type StatementKind = (typeof STATEMENT_KINDS)[number]\n\nexport interface CompiledStatement {\n readonly kind: StatementKind\n readonly sql: string\n}\n\nexport interface PlannedMigration {\n readonly namespace: string\n readonly schema: string\n readonly statements: readonly CompiledStatement[]\n /** Snapshot of the desired state — persisted by the registry, previous input to the next plan. */\n readonly snapshot: NamespaceSnapshot\n}\n\n/**\n * Desired definition + the previously applied snapshot → ordered statements.\n * The owned policies on pre-existing tables drop first (Postgres refuses to\n * alter or drop a column a live policy depends on), hints (declared\n * renames/casts) rewrite the previous snapshot, drizzle-kit diffs the\n * remainder, and the owned security statements (FORCE RLS, recreated\n * policies, consumer grants) close every migration.\n */\nexport async function planMigration({\n definition,\n previousSnapshot,\n}: {\n definition: NamespaceDefinition\n previousSnapshot?: NamespaceSnapshot\n}): Promise<PlannedMigration> {\n const schema = ormSchemaName(definition.namespace)\n // Stored snapshots may predate this kit — normalize (and fail loudly on\n // a newer-than-us format) before anything diffs against them.\n const previous = previousSnapshot ? normalizeSnapshot(previousSnapshot) : emptySnapshot(definition.namespace)\n const hints = applyMigrationHints(previous, definition)\n const snapshot = generateSnapshot(definition, previousId(previous))\n const ddl = await diffStatements(hints.adjusted, snapshot)\n // Only tables the previous snapshot holds exist in the database — DROP\n // POLICY IF EXISTS still errors when the table itself is missing.\n const policyDrops = policyDropStatements(schema, snapshotTableNames(previous, schema))\n\n const statements: CompiledStatement[] = [\n ...policyDrops.map((sql) => ({ kind: 'security' as const, sql })),\n ...hints.statements.map((sql) => ({ kind: 'hint' as const, sql })),\n ...ddl.map((sql) => ({ kind: 'ddl' as const, sql: sql.replace(/;\\s*$/, '') })),\n ...securityStatements(definition).map((sql) => ({ kind: 'security' as const, sql })),\n // PREPARE each action's executes first (plpgsql bodies don't check columns\n // at CREATE), then create the functions. Both reference the tables the DDL\n // above creates, so they close the plan.\n ...actionPrepareChecks(definition).map((sql) => ({ kind: 'function' as const, sql })),\n ...actionFunctionStatements(definition).map((sql) => ({ kind: 'function' as const, sql })),\n ]\n return { namespace: definition.namespace, schema, statements, snapshot }\n}\n\n/** Full-create plan (empty previous snapshot) — what `plan` prints and first apply runs. */\nexport const compileNamespace = (definition: NamespaceDefinition): Promise<PlannedMigration> =>\n planMigration({ definition })\n\nconst previousId = (snapshot: NamespaceSnapshot): string | undefined =>\n (snapshot as { id?: string }).id\n\nexport { isOwnedStatement, pendingKitStatements } from './converge.js'\nexport { buildDrizzleEntities } from './tables.js'\nexport type { DrizzleEntities } from './tables.js'\nexport {\n ACTION_REQUIRES_DENIED_SQLSTATE,\n ACTION_VALIDATES_FAILED_SQLSTATE,\n actionFunctionName,\n actionFunctionStatements,\n actionPrepareChecks,\n} from './actions.js'\nexport { securityStatements } from './security.js'\nexport { applyMigrationHints, diffStatements, emptySnapshot, generateSnapshot, normalizeSnapshot } from './snapshot.js'\nexport type { NamespaceSnapshot } from './snapshot.js'\nexport { sqlTypeName } from './types.js'\n","import { createHash } from 'node:crypto'\nimport { HASH_DOMAIN } from './constants.js'\nimport type { NamespaceCapabilities, NamespaceDefinition } from './schema/namespace.js'\nimport type { TableFile } from './schema/table.js'\n\ntype JsonValue = string | number | boolean | null | JsonValue[] | { [key: string]: JsonValue }\n\n/** Key-sorted, undefined-skipped JSON — identical definitions hash identically regardless of YAML key order. */\nexport function stableJson(value: unknown): string {\n if (value === null || typeof value !== 'object') return JSON.stringify(value)\n if (Array.isArray(value)) return `[${value.map(stableJson).join(',')}]`\n const entries = Object.entries(value as Record<string, unknown>)\n .filter(([, entryValue]) => entryValue !== undefined)\n .sort(([a], [b]) => (a < b ? -1 : 1))\n .map(([key, entryValue]) => `${JSON.stringify(key)}:${stableJson(entryValue)}`)\n return `{${entries.join(',')}}`\n}\n\n/** Empty collections hash as omitted — `indexes: []` and no indexes are the same definition. */\nfunction emptyToNull(value: unknown): JsonValue {\n if (value == null) return null\n if (Array.isArray(value)) return value.length === 0 ? null : (value as JsonValue)\n if (typeof value === 'object' && Object.keys(value).length === 0) return null\n return value as JsonValue\n}\n\n/** Predicates hash by their source text; parsed ASTs are derived and excluded. */\nfunction canonicalTable(table: TableFile): JsonValue {\n return {\n table: table.table,\n description: table.description ?? null,\n columns: (table.columns ?? null) as JsonValue,\n source: table.source ?? null,\n links: emptyToNull(table.links),\n indexes: emptyToNull(table.indexes),\n policies: {\n read: table.policies?.read?.source ?? null,\n write: table.policies?.write?.source ?? null,\n },\n actions: emptyToNull(\n Object.fromEntries(\n Object.entries(table.actions ?? {}).map(([name, action]) => [\n name,\n {\n description: action.description ?? null,\n requires: action.requires?.source ?? null,\n params: emptyToNull(action.params),\n validates: emptyToNull(action.validates?.map((entry) => entry.source)),\n executes: action.executes,\n returns: emptyToNull(action.returns),\n audit: (action.audit ?? null) as JsonValue,\n },\n ]),\n ),\n ),\n }\n}\n\n/**\n * The capabilities block, canonicalized: record keys sort via stableJson, and\n * we sort every array (uses, each role's inherits/grants) so authoring order\n * never changes the hash. Absent optional descriptions are omitted, not null,\n * so the canonical block round-trips back through the manifest schema. An empty\n * block hashes as omitted — \"no capabilities\" and an empty block are the same.\n */\nfunction canonicalCapabilities(capabilities: NamespaceCapabilities): JsonValue {\n const { definitions, capabilities: declared } = capabilities.roles\n const isEmpty =\n Object.keys(definitions).length === 0 && Object.keys(declared).length === 0 && capabilities.uses.length === 0\n if (isEmpty) return null\n // JSON-safe by construction (omitted optionals are dropped by stableJson); the\n // conditional spreads defeat structural inference, so assert the JsonValue shape.\n return {\n roles: {\n definitions: Object.fromEntries(\n Object.entries(definitions).map(([key, def]) => [\n key,\n {\n ...(def.description !== undefined ? { description: def.description } : {}),\n default: def.default,\n inherits: [...def.inherits].sort(),\n grants: [...def.grants].sort(),\n },\n ]),\n ),\n capabilities: Object.fromEntries(\n Object.entries(declared).map(([key, cap]) => [\n key,\n cap.description !== undefined ? { description: cap.description } : {},\n ]),\n ),\n },\n uses: [...capabilities.uses].sort(),\n } as JsonValue\n}\n\nexport function canonicalizeDefinition(definition: NamespaceDefinition): JsonValue {\n return {\n namespace: definition.namespace,\n description: definition.description,\n capabilities: canonicalCapabilities(definition.capabilities),\n tables: definition.tables.map(canonicalTable),\n }\n}\n\nexport function computeDefinitionHash(definition: NamespaceDefinition): string {\n return createHash('sha256')\n .update(HASH_DOMAIN)\n .update(stableJson(canonicalizeDefinition(definition)))\n .digest('hex')\n}\n","/**\n * Custom Roles & Capabilities manifest grammar — the `capabilities.roles`\n * block and the `capabilities.uses` pin set. This is a VERBATIM mirror of the\n * platform's canonical grammar so an ORM namespace declares roles/capabilities\n * the exact same way an artifact or managed function does; apply feeds it to\n * the shared `reconcileHostRegistryOnActivation` reconciler untouched.\n *\n * Canonical sources — keep the grammar in sync by hand (schema shape, key\n * regexes, limits, and superRefine rules). The behavioral guards in\n * definitions.test.ts exercise this copy (inherit cycle, unknown grant,\n * pin-names-role, key collision) so a drifted rule fails there:\n * atlas/src/server/services/custom-roles/manifest-block.ts (server)\n * shared/services/artifact-studio/src/manifest-custom-roles.ts (CLI)\n */\nimport { z } from 'zod'\n\n/**\n * Key grammar for roles and capabilities. Deliberately excludes `_` so the\n * FGA object id `custom_role:<host>__<key>` can use `__` as an unambiguous\n * delimiter.\n */\nexport const CUSTOM_ROLE_KEY_RE = /^[a-z0-9-]+$/\n\nconst customRoleKeySchema = z.string().min(1).max(64).regex(\n CUSTOM_ROLE_KEY_RE,\n 'Role and capability keys must match [a-z0-9-]+',\n)\n\nconst MAX_CUSTOM_ROLE_DEFINITIONS = 50\nconst MAX_CUSTOM_ROLE_CAPABILITIES = 100\n\nconst customRoleCapabilityDeclarationSchema = z.object({\n description: z.string().max(500).optional(),\n})\n\nconst customRoleDefinitionSchema = z.object({\n description: z.string().max(500).optional(),\n /**\n * Grants this role to the host's entire runtime audience. Resolved at the\n * app layer at claim time — every caller who passes the host floor\n * (`end_user`) holds the default roles; no tuple is written for it.\n */\n default: z.boolean().default(false),\n /** Role keys whose grants this role also receives (privilege waterfall). */\n inherits: z.array(customRoleKeySchema).default([]),\n /** Capability keys this role grants directly. */\n grants: z.array(customRoleKeySchema).default([]),\n})\n\n/**\n * Manifest-declared custom roles & capabilities. Roles and capabilities are\n * both `custom_role` FGA objects; deploy reconciliation turns this block into\n * the structural waterfall edges (role→capability / senior→junior `assignee`\n * userset tuples) — nothing else. The host floor is enforced app-layer at the\n * resolution points, never in the model. Runtime grants (user/group/org →\n * role) are NEVER declared here — they are written through host-admin-gated\n * endpoints.\n */\nexport const customRolesBlockSchema = z.object({\n /** Roles grantable to principals, keyed by role key. */\n definitions: z.record(customRoleKeySchema, customRoleDefinitionSchema).default({}),\n /** Leaf capability keys the host's code checks, keyed by capability key. */\n capabilities: z.record(customRoleKeySchema, customRoleCapabilityDeclarationSchema).default({}),\n}).superRefine((block, ctx) => {\n const roleKeys = Object.keys(block.definitions)\n const capabilityKeys = new Set(Object.keys(block.capabilities))\n\n if (roleKeys.length > MAX_CUSTOM_ROLE_DEFINITIONS) {\n ctx.addIssue({\n code: 'custom',\n message: `At most ${MAX_CUSTOM_ROLE_DEFINITIONS} role definitions are allowed`,\n path: ['definitions'],\n })\n }\n if (capabilityKeys.size > MAX_CUSTOM_ROLE_CAPABILITIES) {\n ctx.addIssue({\n code: 'custom',\n message: `At most ${MAX_CUSTOM_ROLE_CAPABILITIES} capabilities are allowed`,\n path: ['capabilities'],\n })\n }\n\n // Roles and capabilities share one FGA object namespace on the host —\n // a key present in both would collapse two objects into one.\n for (const key of roleKeys) {\n if (capabilityKeys.has(key)) {\n ctx.addIssue({\n code: 'custom',\n message: `Key \"${key}\" is declared as both a role and a capability`,\n path: ['definitions', key],\n })\n }\n }\n\n const roleKeySet = new Set(roleKeys)\n for (const [roleKey, definition] of Object.entries(block.definitions)) {\n const seenInherits = new Set<string>()\n for (const inherited of definition.inherits) {\n if (seenInherits.has(inherited)) {\n ctx.addIssue({\n code: 'custom',\n message: `Role \"${roleKey}\" lists \"${inherited}\" in inherits more than once`,\n path: ['definitions', roleKey, 'inherits'],\n })\n }\n seenInherits.add(inherited)\n if (!roleKeySet.has(inherited)) {\n ctx.addIssue({\n code: 'custom',\n message: `Role \"${roleKey}\" inherits unknown role \"${inherited}\"`,\n path: ['definitions', roleKey, 'inherits'],\n })\n }\n }\n const seenGrants = new Set<string>()\n for (const granted of definition.grants) {\n if (seenGrants.has(granted)) {\n ctx.addIssue({\n code: 'custom',\n message: `Role \"${roleKey}\" lists \"${granted}\" in grants more than once`,\n path: ['definitions', roleKey, 'grants'],\n })\n }\n seenGrants.add(granted)\n if (!capabilityKeys.has(granted)) {\n ctx.addIssue({\n code: 'custom',\n message: `Role \"${roleKey}\" grants unknown capability \"${granted}\"`,\n path: ['definitions', roleKey, 'grants'],\n })\n }\n }\n }\n\n // The inherits graph must be a DAG: a cycle would make the FGA waterfall\n // walk self-referential. DFS with tri-color marking; report the first\n // cycle found.\n const state = new Map<string, 'visiting' | 'done'>()\n const visit = (key: string, path: string[]): string[] | null => {\n if (state.get(key) === 'done') return null\n if (state.get(key) === 'visiting') return [...path, key]\n state.set(key, 'visiting')\n const definition = block.definitions[key]\n for (const inherited of definition?.inherits ?? []) {\n if (!roleKeySet.has(inherited)) continue\n const cycle = visit(inherited, [...path, key])\n if (cycle) return cycle\n }\n state.set(key, 'done')\n return null\n }\n for (const roleKey of roleKeys) {\n const cycle = visit(roleKey, [])\n if (cycle) {\n ctx.addIssue({\n code: 'custom',\n message: `Role inheritance cycle: ${cycle.join(' -> ')}`,\n path: ['definitions'],\n })\n break\n }\n }\n})\n\nexport type CustomRolesBlock = z.infer<typeof customRolesBlockSchema>\n\n/** True when the block declares at least one role or capability. */\nexport function customRolesDeclared(block: CustomRolesBlock | null | undefined): boolean {\n if (!block) return false\n return Object.keys(block.definitions).length > 0 || Object.keys(block.capabilities).length > 0\n}\n\n/**\n * Capability pins — the `capabilities.uses` attachment set. A pin references a\n * REGISTRY capability the host's code checks: `org/<key>` for an org-scoped\n * capability (must already exist — hosts never create org entities), or a bare\n * `<key>` for a host-scoped one (declared in this block's\n * `capabilities.roles.capabilities` record, or already published to the host's\n * registry scope). Roles are never pinned — composition and grants are live\n * runtime configuration owned by the registry.\n */\nexport const CUSTOM_CAPABILITY_PIN_RE = /^(?:org\\/)?[a-z0-9-]+$/\n\nconst MAX_CAPABILITY_PINS = 100\n\nexport const capabilityPinsSchema = z\n .array(\n z.string().min(1).max(68).regex(\n CUSTOM_CAPABILITY_PIN_RE,\n 'Pins must be \"org/<key>\" or a bare \"<key>\" matching [a-z0-9-]+',\n ),\n )\n .max(MAX_CAPABILITY_PINS)\n .default([])\n\nexport interface ParsedCapabilityPin {\n scope: 'org' | 'host'\n key: string\n}\n\n/** Split a pin into its scope and key. Assumes the pin grammar validated. */\nexport function parseCapabilityPin(pin: string): ParsedCapabilityPin {\n return pin.startsWith('org/')\n ? { scope: 'org', key: pin.slice('org/'.length) }\n : { scope: 'host', key: pin }\n}\n\n/**\n * Cross-field pin validation (the `uses` array and the roles block are\n * siblings under `capabilities`). Purely structural — registry existence\n * checks are server-side, at activation, where atomicity lives.\n */\nexport function validateCapabilityPins({\n uses,\n roles,\n}: {\n uses: readonly string[]\n roles: CustomRolesBlock | null | undefined\n}): string[] {\n const errors: string[] = []\n const seen = new Set<string>()\n const roleKeys = new Set(Object.keys(roles?.definitions ?? {}))\n for (const pin of uses) {\n if (seen.has(pin)) errors.push(`Pin \"${pin}\" is listed more than once`)\n seen.add(pin)\n const parsed = parseCapabilityPin(pin)\n if (parsed.scope === 'host' && roleKeys.has(parsed.key)) {\n errors.push(`Pin \"${pin}\" references a role — roles are never pinned`)\n }\n }\n return errors\n}\n","import { referencedExecuteCapabilities } from '../compiler/actions.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { referencedCapabilities } from '../predicate/ast.js'\nimport { validateCapabilityPins, type CustomRolesBlock } from './custom-roles-block.js'\nimport { isQualifiedReference } from './identifiers.js'\nimport type { NamespaceConfig } from './namespace-config.js'\nimport { columnTypeGroup, indexName, type TableFile } from './table.js'\n\n/**\n * The namespace's Custom Roles manifest block — the platform grammar, verbatim\n * (see custom-roles-block.ts). `roles` declares capabilities + roles (grants,\n * inherits); `uses` attaches existing capabilities. Reconciled into the Custom\n * Roles attachment set at apply, so it's grantable and enters claim resolution.\n */\nexport interface NamespaceCapabilities {\n readonly roles: CustomRolesBlock\n readonly uses: readonly string[]\n}\n\nexport interface NamespaceDefinition {\n readonly namespace: string\n readonly description: string | null\n readonly capabilities: NamespaceCapabilities\n readonly tables: readonly TableFile[]\n}\n\nconst EMPTY_CAPABILITIES: NamespaceCapabilities = { roles: { definitions: {}, capabilities: {} }, uses: [] }\n\n/** The capability claim keys the block declares — bare declarations plus every attach. */\nexport function declaredCapabilityKeys(capabilities: NamespaceCapabilities): Set<string> {\n return new Set<string>([...Object.keys(capabilities.roles.capabilities), ...capabilities.uses])\n}\n\nexport interface DefinitionFile {\n readonly file: string\n readonly table: TableFile\n}\n\nexport function buildNamespaceDefinition(\n files: readonly DefinitionFile[],\n config?: NamespaceConfig,\n): NamespaceDefinition {\n if (files.length === 0) throw new OrmDefinitionError('no table definitions found')\n\n const namespace = (files[0] as DefinitionFile).table.namespace\n if (config && config.namespace !== namespace) {\n throw new OrmDefinitionError(`namespace '${config.namespace}' conflicts with '${namespace}'`, 'namespace.yaml')\n }\n for (const { file, table } of files) {\n if (table.namespace !== namespace) {\n throw new OrmDefinitionError(`namespace '${table.namespace}' conflicts with '${namespace}'`, file)\n }\n }\n\n const seen = new Map<string, string>()\n for (const { file, table } of files) {\n const existing = seen.get(table.table)\n if (existing) throw new OrmDefinitionError(`table '${table.table}' is already defined in ${existing}`, file)\n seen.set(table.table, file)\n }\n\n // Actions are addressed namespace-wide (/actions/<name>) — a name must\n // resolve to exactly one action regardless of which table file declared it.\n const actionsSeen = new Map<string, string>()\n for (const { file, table } of files) {\n for (const name of Object.keys(table.actions ?? {})) {\n const existing = actionsSeen.get(name)\n if (existing) throw new OrmDefinitionError(`action '${name}' is already defined in ${existing}`, file)\n actionsSeen.set(name, file)\n }\n }\n\n const capabilities: NamespaceCapabilities = config?.capabilities\n ? { roles: config.capabilities.roles ?? EMPTY_CAPABILITIES.roles, uses: config.capabilities.uses ?? [] }\n : EMPTY_CAPABILITIES\n const pinIssues = validateCapabilityPins({ uses: capabilities.uses, roles: capabilities.roles })\n if (pinIssues.length > 0) throw new OrmDefinitionError(pinIssues.join('; '), 'namespace.yaml')\n const tables = files.map(({ table }) => table).sort((a, b) => a.table.localeCompare(b.table))\n const byName = new Map(tables.map((table) => [table.table, table]))\n validateLocalLinks(files, byName)\n validateActionValidates(files, byName)\n validateIndexNames(files)\n validateCapabilityRefs(files, declaredCapabilityKeys(capabilities))\n return { namespace, description: config?.description ?? null, capabilities, tables }\n}\n\n/**\n * A `validates: exists('<table>', <param>)` entry only resolves at execute\n * time against a real local table — an unknown target (or a param that can\n * never match the target's primary key) is an action that can never pass,\n * so fail at build like links do. Qualified references stay soft.\n */\nfunction validateActionValidates(files: readonly DefinitionFile[], byName: ReadonlyMap<string, TableFile>): void {\n for (const { file, table } of files) {\n for (const [actionName, action] of Object.entries(table.actions ?? {})) {\n for (const entry of action.validates ?? []) {\n if (entry.table.includes('.')) continue\n const target = byName.get(entry.table)\n if (!target) {\n throw new OrmDefinitionError(`action '${actionName}' validates against unknown table '${entry.table}'`, file)\n }\n if (target.source) {\n // Synced tables reflect their gold source and declare no primary\n // key, so the runtime exists() check has no key to resolve — it\n // would 422 every call. Reject at build rather than fail at run.\n throw new OrmDefinitionError(\n `action '${actionName}' validates against synced table '${entry.table}' — synced tables can't be validates targets`,\n file,\n )\n }\n const paramType = action.params?.[entry.param]?.type\n const targetPrimaryKey = Object.values(target.columns ?? {}).find((column) => column.primary_key)\n if (paramType && targetPrimaryKey && columnTypeGroup(paramType) !== columnTypeGroup(targetPrimaryKey.type)) {\n throw new OrmDefinitionError(\n `action '${actionName}' validates '${entry.param}' (${paramType}) against '${entry.table}' whose primary key is ${targetPrimaryKey.type}`,\n file,\n )\n }\n }\n }\n }\n}\n\n/**\n * Postgres index names are schema-scoped, not table-scoped — two tables in\n * one namespace declaring (or deriving) the same index name would build fine\n * and then fail on the second CREATE INDEX at apply. Reject at load instead.\n */\nfunction validateIndexNames(files: readonly DefinitionFile[]): void {\n // Everything here shares one pg_class relation namespace in the orm schema:\n // tables, declared indexes, and the indexes Postgres creates implicitly for\n // primary-key (`<table>_pkey`) and unique-column (`<table>_<col>_unique`)\n // constraints. Seed them all so any collision fails at load, not at apply.\n const seen = new Map<string, string>()\n const claim = (name: string, label: string, file: string) => {\n const existing = seen.get(name)\n if (existing) {\n throw new OrmDefinitionError(`relation name '${name}' (${label}) collides with ${existing}`, file)\n }\n seen.set(name, `${label} (${file})`)\n }\n\n for (const { file, table } of files) {\n claim(table.table, `table '${table.table}'`, file)\n }\n for (const { file, table } of files) {\n if (table.source) continue\n claim(`${table.table}_pkey`, `implicit primary-key index of '${table.table}'`, file)\n for (const [name, column] of Object.entries(table.columns ?? {})) {\n if (column.unique && !column.primary_key) {\n claim(`${table.table}_${name}_unique`, `implicit unique constraint of '${table.table}.${name}'`, file)\n }\n }\n }\n for (const { file, table } of files) {\n for (const definition of table.indexes ?? []) {\n claim(indexName(table.table, definition), `index on '${table.table}'`, file)\n }\n }\n}\n\nfunction validateLocalLinks(files: readonly DefinitionFile[], byName: ReadonlyMap<string, TableFile>): void {\n for (const { file, table } of files) {\n for (const [name, link] of Object.entries(table.links ?? {})) {\n if (isQualifiedReference(link.to)) continue\n const target = byName.get(link.to)\n if (!target) {\n throw new OrmDefinitionError(`link '${name}' references unknown table '${link.to}'`, file)\n }\n if (link.enforce && target.source) {\n throw new OrmDefinitionError(`link '${name}' cannot enforce a foreign key onto a synced table`, file)\n }\n // Soft links join at query time — a type mismatch with the target's\n // primary key can never match a row, so it fails at load like an\n // enforced one would fail at ALTER. Synced targets reflect their\n // source (no declared pk) and stay unchecked.\n // Group comparability, not exact equality — int4 = int8 joins fine.\n const sourceType = table.columns?.[link.on]?.type\n const targetPrimaryKey = Object.values(target.columns ?? {}).find((column) => column.primary_key)\n if (sourceType && targetPrimaryKey && columnTypeGroup(sourceType) !== columnTypeGroup(targetPrimaryKey.type)) {\n throw new OrmDefinitionError(\n `link '${name}' can never join: '${link.on}' is ${sourceType} but '${link.to}' has a ${targetPrimaryKey.type} primary key`,\n file,\n )\n }\n }\n }\n}\n\n/**\n * A capability reference only resolves at claim time if the namespace DECLARES\n * it — a capability that's neither declared (`capabilities.roles.capabilities`)\n * nor attached (`capabilities.uses`) never enters the attachment set, so it's\n * neither grantable in Custom Roles nor present in any caller's claims. An\n * undeclared reference is a policy that can never pass — fail at build.\n */\nfunction validateCapabilityRefs(files: readonly DefinitionFile[], declared: ReadonlySet<string>): void {\n for (const { file, table } of files) {\n const referenced = [\n ...(table.policies?.read ? referencedCapabilities(table.policies.read.ast) : []),\n ...(table.policies?.write ? referencedCapabilities(table.policies.write.ast) : []),\n ...Object.values(table.actions ?? {}).flatMap((action) => [\n ...(action.requires ? referencedCapabilities(action.requires.ast) : []),\n ...referencedExecuteCapabilities(action),\n ]),\n ]\n for (const key of referenced) {\n if (!declared.has(key)) {\n throw new OrmDefinitionError(\n `capability('${key}') is not declared — add it under capabilities.roles.capabilities or capabilities.uses in namespace.yaml`,\n file,\n )\n }\n }\n }\n}\n","import { z } from 'zod'\nimport { capabilityPinsSchema, customRolesBlockSchema } from './custom-roles-block.js'\nimport { namespaceSchema } from './identifiers.js'\n\n/**\n * The reserved `namespace.yaml` — namespace-level settings beside the table\n * files. `capabilities` is the platform's Custom Roles manifest block, authored\n * exactly as an artifact or managed function authors it:\n * - `capabilities.roles.capabilities` declares namespace-scoped capabilities\n * (published on the namespace's registry scope + pinned at apply),\n * - `capabilities.roles.definitions` declares roles (grants + inherits) that\n * bundle those capabilities,\n * - `capabilities.uses` attaches EXISTING capabilities — `org/<key>` for an\n * org capability (namespaces never create org entities), or a bare `<key>`\n * already published on the namespace scope.\n * Apply feeds this block straight to the shared attachment reconciler, so the\n * capabilities are grantable in Custom Roles and enter claim resolution.\n */\nexport const namespaceConfigSchema = z.strictObject({\n namespace: namespaceSchema,\n description: z.string().optional(),\n capabilities: z\n .strictObject({\n roles: customRolesBlockSchema.optional(),\n uses: capabilityPinsSchema.optional(),\n })\n .optional(),\n})\n\nexport type NamespaceConfig = z.output<typeof namespaceConfigSchema>\n","import { readdir, readFile } from 'node:fs/promises'\nimport { extname, join } from 'node:path'\nimport { load as loadYaml } from 'js-yaml'\nimport { z } from 'zod'\nimport {\n DEFINITION_FILE_EXTENSIONS,\n MAX_DEFINITION_FILE_BYTES,\n NAMESPACE_CONFIG_FILENAMES,\n} from './constants.js'\nimport { OrmDefinitionError } from './errors.js'\nimport { computeDefinitionHash } from './hash.js'\nimport { buildNamespaceDefinition, type DefinitionFile, type NamespaceDefinition } from './schema/namespace.js'\nimport { namespaceConfigSchema, type NamespaceConfig } from './schema/namespace-config.js'\nimport { tableFileSchema } from './schema/table.js'\n\nexport interface LoadedNamespace {\n readonly definition: NamespaceDefinition\n readonly contentHash: string\n readonly files: readonly string[]\n}\n\nexport function parseTableFile(file: string, contents: string): DefinitionFile {\n const parsed = tableFileSchema.safeParse(parseYaml(file, contents))\n if (!parsed.success) throw new OrmDefinitionError(formatIssues(parsed.error), file)\n return { file, table: parsed.data }\n}\n\nexport interface DefinitionSource {\n readonly path: string\n readonly contents: string\n}\n\n/**\n * Raw sources → validated definition, splitting the reserved namespace\n * config file from the table files. The one parse path for the loader and\n * the registry, so a local directory and an uploaded bundle can't diverge.\n */\nexport function parseDefinitionSources(sources: readonly DefinitionSource[]): NamespaceDefinition {\n let config: NamespaceConfig | undefined\n const tables: DefinitionFile[] = []\n for (const source of sources) {\n if (NAMESPACE_CONFIG_FILENAMES.has(source.path)) {\n if (config) throw new OrmDefinitionError('duplicate namespace config file', source.path)\n const parsed = namespaceConfigSchema.safeParse(parseYaml(source.path, source.contents))\n if (!parsed.success) throw new OrmDefinitionError(formatIssues(parsed.error), source.path)\n config = parsed.data\n continue\n }\n tables.push(parseTableFile(source.path, source.contents))\n }\n return buildNamespaceDefinition(tables, config)\n}\n\nexport async function loadNamespaceDefinition(dir: string): Promise<LoadedNamespace> {\n const files = await listDefinitionFiles(dir)\n if (files.length === 0) throw new OrmDefinitionError(`no ${DEFINITION_FILE_EXTENSIONS.join('/')} files in ${dir}`)\n\n const sources: DefinitionSource[] = []\n for (const file of files) {\n const contents = await readFile(join(dir, file), 'utf8')\n if (Buffer.byteLength(contents, 'utf8') > MAX_DEFINITION_FILE_BYTES) {\n throw new OrmDefinitionError(`exceeds the maximum definition file size of ${MAX_DEFINITION_FILE_BYTES} bytes`, file)\n }\n sources.push({ path: file, contents })\n }\n\n const definition = parseDefinitionSources(sources)\n return { definition, contentHash: computeDefinitionHash(definition), files }\n}\n\nfunction parseYaml(file: string, contents: string): unknown {\n try {\n return loadYaml(contents)\n } catch (error) {\n throw new OrmDefinitionError(error instanceof Error ? error.message : 'invalid YAML', file)\n }\n}\n\nconst isDefinitionFile = (name: string): boolean =>\n DEFINITION_FILE_EXTENSIONS.some((extension) => extname(name) === extension)\n\nasync function listDefinitionFiles(dir: string): Promise<string[]> {\n const entries = await readdir(dir, { withFileTypes: true })\n return entries\n .filter((entry) => entry.isFile() && isDefinitionFile(entry.name))\n .map((entry) => entry.name)\n .sort()\n}\n\nfunction formatIssues(error: z.ZodError): string {\n return error.issues\n .map((issue) => (issue.path.length > 0 ? `${issue.path.join('.')}: ${issue.message}` : issue.message))\n .join('; ')\n}\n","import type { CompiledStatement } from '../engine/index.js'\n\nexport interface DestructiveStatement {\n readonly sql: string\n readonly reason: string\n}\n\n/** A column type change — `SET DATA TYPE` / `TYPE`. Data-losing in general (numeric→integer rounds, a narrowing text cast truncates). */\nconst TYPE_CHANGE = /\\bALTER\\s+COLUMN\\s+\"?[a-z_][a-z0-9_]*\"?\\s+(?:SET\\s+DATA\\s+)?TYPE\\b/i\n\n/**\n * Statements that lose data if they run. `ddl` statements match the rules\n * below; `security` statements are a drop-and-recreate of policies by design\n * and always safe. Of the `hint` statements (the declared rename/cast\n * rewrites), a RENAME never loses data, but a declared `cast:` is still a type\n * change that can — declaring HOW to convert is not the same as consenting to\n * the data loss, so a cast hint stays gated on `--allow-destructive` too.\n */\nconst RULES: ReadonlyArray<{ pattern: RegExp; reason: string }> = [\n { pattern: /^\\s*DROP\\s+SCHEMA\\b/i, reason: 'drops the namespace schema and everything in it' },\n { pattern: /^\\s*DROP\\s+TABLE\\b/i, reason: 'drops a table and all of its rows' },\n { pattern: /^\\s*TRUNCATE\\b/i, reason: 'deletes every row' },\n { pattern: /\\bDROP\\s+COLUMN\\b/i, reason: 'drops a column and its data' },\n {\n pattern: TYPE_CHANGE,\n reason: \"changes a column type without a declared cast (add `cast: '<column>::<type>'` to make the conversion explicit)\",\n },\n]\n\nexport function classifyDestructive(statements: readonly CompiledStatement[]): DestructiveStatement[] {\n const flagged: DestructiveStatement[] = []\n for (const statement of statements) {\n if (statement.kind === 'ddl') {\n const rule = RULES.find(({ pattern }) => pattern.test(statement.sql))\n if (rule) flagged.push({ sql: statement.sql, reason: rule.reason })\n } else if (statement.kind === 'hint' && TYPE_CHANGE.test(statement.sql)) {\n flagged.push({ sql: statement.sql, reason: 'a declared cast changes a column type and can lose data (numeric→integer rounds, a narrowing cast truncates)' })\n }\n }\n return flagged\n}\n","import { createHash } from 'node:crypto'\nimport { mkdir, readFile, writeFile } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport { z } from 'zod'\nimport { OrmDefinitionError } from '../errors.js'\nimport type { NamespaceSnapshot, PlannedMigration } from '../engine/index.js'\n\n/**\n * The committed migration workspace inside a definitions directory:\n *\n * <dir>/migrations/NNNN_<hash12>.sql reviewable statements\n * <dir>/migrations/meta/NNNN.snapshot.json desired-state snapshot after NNNN\n * <dir>/migrations/meta/journal.json ordered index with checksums\n *\n * `orm diff` appends to it; `orm diff --check` (the CI gate) verifies it\n * matches the definitions with no database and no credentials. Everything\n * here is deterministic from (previous snapshot, definition) so the gate\n * can regenerate and byte-compare.\n */\nexport const MIGRATIONS_DIRNAME = 'migrations'\nconst META_DIRNAME = 'meta'\nconst JOURNAL_FILENAME = 'journal.json'\n\nconst journalEntrySchema = z.object({\n ordinal: z.number().int().positive(),\n name: z.string().min(1),\n content_hash: z.string().length(64),\n /** Definitions hash the migration was diffed FROM — null on the first. Replay checks an environment sits at this base. */\n previous_content_hash: z.string().length(64).nullable(),\n checksum: z.string().length(64),\n /** sha256 of the snapshot FILE — the next diff builds on this snapshot, so a hand-edit must fail `--check` too. */\n snapshot_checksum: z.string().length(64),\n destructive: z.boolean(),\n})\n\nconst journalSchema = z.object({\n version: z.literal(1),\n namespace: z.string().min(1),\n entries: z.array(journalEntrySchema),\n})\n\nexport type MigrationJournal = z.infer<typeof journalSchema>\nexport type JournalEntry = z.infer<typeof journalEntrySchema>\n\nexport interface MigrationWorkspace {\n readonly journal: MigrationJournal\n /** Snapshot at the journal tip — the previous input for the next diff. */\n readonly tipSnapshot: NamespaceSnapshot | undefined\n}\n\nexport const emptyJournal = (namespace: string): MigrationJournal => ({ version: 1, namespace, entries: [] })\n\nexport async function readMigrationWorkspace(dir: string, namespace: string): Promise<MigrationWorkspace> {\n const journalPath = join(dir, MIGRATIONS_DIRNAME, META_DIRNAME, JOURNAL_FILENAME)\n const raw = await readFile(journalPath, 'utf8').catch(() => null)\n if (raw === null) return { journal: emptyJournal(namespace), tipSnapshot: undefined }\n\n const parsed = journalSchema.safeParse(parseJson(journalPath, raw))\n if (!parsed.success) {\n throw new OrmDefinitionError(`invalid migration journal: ${parsed.error.issues[0]?.message ?? 'unreadable'}`, journalPath)\n }\n if (parsed.data.namespace !== namespace) {\n throw new OrmDefinitionError(\n `migration journal belongs to namespace '${parsed.data.namespace}', definitions are '${namespace}'`,\n journalPath,\n )\n }\n parsed.data.entries.forEach((entry, index) => {\n if (entry.ordinal !== index + 1) {\n throw new OrmDefinitionError(`migration journal entries must be contiguous from 1 (found ${entry.name})`, journalPath)\n }\n })\n\n const tip = parsed.data.entries.at(-1)\n return { journal: parsed.data, tipSnapshot: tip ? await readSnapshot(dir, tip.ordinal) : undefined }\n}\n\nexport async function readSnapshotText(dir: string, ordinal: number): Promise<string> {\n const path = join(dir, MIGRATIONS_DIRNAME, META_DIRNAME, `${pad(ordinal)}.snapshot.json`)\n return readFile(path, 'utf8').catch(() => {\n throw new OrmDefinitionError('missing migration snapshot', path)\n })\n}\n\nexport async function readSnapshot(dir: string, ordinal: number): Promise<NamespaceSnapshot> {\n const path = join(dir, MIGRATIONS_DIRNAME, META_DIRNAME, `${pad(ordinal)}.snapshot.json`)\n return parseJson(path, await readSnapshotText(dir, ordinal)) as NamespaceSnapshot\n}\n\nexport async function readMigrationSql(dir: string, entry: JournalEntry): Promise<string> {\n const path = join(dir, MIGRATIONS_DIRNAME, `${entry.name}.sql`)\n return readFile(path, 'utf8').catch(() => {\n throw new OrmDefinitionError('missing migration file', path)\n })\n}\n\nexport const checksumOf = (text: string): string => createHash('sha256').update(text).digest('hex')\n\nexport const migrationName = (ordinal: number, contentHash: string): string => `${pad(ordinal)}_${contentHash.slice(0, 12)}`\n\nexport function renderMigrationSql({\n name,\n namespace,\n contentHash,\n plan,\n}: {\n name: string\n namespace: string\n contentHash: string\n plan: PlannedMigration\n}): string {\n const header = [\n `-- ${name}`,\n `-- namespace: ${namespace}`,\n `-- content hash: ${contentHash}`,\n '-- generated by `seq-studio orm diff` — review and commit, do not edit',\n ].join('\\n')\n return [header, ...plan.statements.map((statement) => `${statement.sql};`)].join('\\n\\n') + '\\n'\n}\n\nexport interface WrittenMigration {\n readonly name: string\n readonly ordinal: number\n readonly destructive: boolean\n}\n\nexport async function writeMigration({\n dir,\n workspace,\n plan,\n contentHash,\n destructive,\n}: {\n dir: string\n workspace: MigrationWorkspace\n plan: PlannedMigration\n contentHash: string\n destructive: boolean\n}): Promise<WrittenMigration> {\n const tip = workspace.journal.entries.at(-1)\n const ordinal = (tip?.ordinal ?? 0) + 1\n const name = migrationName(ordinal, contentHash)\n const sql = renderMigrationSql({ name, namespace: workspace.journal.namespace, contentHash, plan })\n\n const metaDir = join(dir, MIGRATIONS_DIRNAME, META_DIRNAME)\n await mkdir(metaDir, { recursive: true })\n const snapshotText = `${JSON.stringify(plan.snapshot, null, 2)}\\n`\n await writeFile(join(dir, MIGRATIONS_DIRNAME, `${name}.sql`), sql)\n await writeFile(join(metaDir, `${pad(ordinal)}.snapshot.json`), snapshotText)\n\n const journal: MigrationJournal = {\n ...workspace.journal,\n entries: [\n ...workspace.journal.entries,\n {\n ordinal,\n name,\n content_hash: contentHash,\n previous_content_hash: tip?.content_hash ?? null,\n checksum: checksumOf(sql),\n snapshot_checksum: checksumOf(snapshotText),\n destructive,\n },\n ],\n }\n await writeFile(join(metaDir, JOURNAL_FILENAME), `${JSON.stringify(journal, null, 2)}\\n`)\n return { name, ordinal, destructive }\n}\n\nconst pad = (ordinal: number): string => String(ordinal).padStart(4, '0')\n\nfunction parseJson(path: string, raw: string): unknown {\n try {\n return JSON.parse(raw) as unknown\n } catch {\n throw new OrmDefinitionError('not valid JSON', path)\n }\n}\n","import { planMigration, type CompiledStatement } from '../engine/index.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport type { LoadedNamespace } from '../loader.js'\nimport {\n MIGRATIONS_DIRNAME,\n readMigrationSql,\n readMigrationWorkspace,\n readSnapshot,\n renderMigrationSql,\n} from './workspace.js'\n\n/**\n * The reviewed migration a registration carries: replay-only environments\n * (production, banksouth) execute nothing that doesn't match one of these.\n * Statements are recomputed at load and verified to reproduce the committed\n * file byte-for-byte, so the payload can never drift from what review saw.\n */\nexport interface CommittedMigration {\n readonly name: string\n readonly ordinal: number\n readonly previous_content_hash: string | null\n readonly destructive: boolean\n readonly checksum: string\n readonly statements: readonly CompiledStatement[]\n}\n\n/**\n * Load the workspace tip as a registration payload. Returns null when there\n * is no workspace (dev-loop registrations stay migration-less); throws when\n * a workspace exists but is stale or drifted — a half-true artifact is worse\n * than none.\n */\nexport async function loadCommittedTipMigration(\n dir: string,\n loaded: LoadedNamespace,\n): Promise<CommittedMigration | null> {\n const workspace = await readMigrationWorkspace(dir, loaded.definition.namespace)\n const tip = workspace.journal.entries.at(-1)\n if (!tip) return null\n\n if (tip.content_hash !== loaded.contentHash) {\n throw new OrmDefinitionError(\n `definitions changed since ${tip.name} — run \\`seq-studio orm diff\\` and commit the new migration`,\n `${MIGRATIONS_DIRNAME}/meta/journal.json`,\n )\n }\n\n const previousSnapshot = tip.ordinal > 1 ? await readSnapshot(dir, tip.ordinal - 1) : undefined\n const plan = await planMigration({ definition: loaded.definition, previousSnapshot })\n const regenerated = renderMigrationSql({\n name: tip.name,\n namespace: loaded.definition.namespace,\n contentHash: loaded.contentHash,\n plan,\n })\n if (regenerated !== (await readMigrationSql(dir, tip))) {\n throw new OrmDefinitionError(\n `${tip.name}.sql does not regenerate from the definitions — run \\`seq-studio orm diff --check\\``,\n MIGRATIONS_DIRNAME,\n )\n }\n\n return {\n name: tip.name,\n ordinal: tip.ordinal,\n previous_content_hash: tip.previous_content_hash,\n destructive: tip.destructive,\n checksum: tip.checksum,\n statements: plan.statements,\n }\n}\n\n/**\n * One link in the committed history: a migration's content hash and the hash it\n * was diffed FROM. This is an ancestry record, NOT executable SQL — a\n * registration carries the whole chain so a replay-only environment can prove\n * that its active version is a reviewed ancestor of the target (and thus that a\n * direct catch-up diff is in-lineage) even over migrations that were never\n * registered there (batched deploys, skipped releases). The catch-up apply then\n * runs the engine's own direct diff, never any SQL from this chain.\n */\nexport interface CommittedChainEntry {\n readonly name: string\n readonly contentHash: string\n readonly previousContentHash: string | null\n}\n\n/**\n * The committed hash chain for a definitions directory, oldest-first, taken from\n * the journal (already integrity-checked by `orm validate` / `diff --check`).\n * The tip must match the loaded definitions — a registration carries this so\n * replay-only environments can verify catch-up ancestry without those\n * intervening versions being registered. Empty when there is no workspace.\n */\nexport async function loadCommittedMigrations(dir: string, loaded: LoadedNamespace): Promise<CommittedChainEntry[]> {\n const workspace = await readMigrationWorkspace(dir, loaded.definition.namespace)\n const entries = workspace.journal.entries\n const tip = entries.at(-1)\n if (!tip) return []\n if (tip.content_hash !== loaded.contentHash) {\n throw new OrmDefinitionError(\n `definitions changed since ${tip.name} — run \\`seq-studio orm diff\\` and commit the new migration`,\n `${MIGRATIONS_DIRNAME}/meta/journal.json`,\n )\n }\n return entries.map((entry) => ({\n name: entry.name,\n contentHash: entry.content_hash,\n previousContentHash: entry.previous_content_hash,\n }))\n}\n","import { planMigration } from '../engine/index.js'\nimport { loadNamespaceDefinition } from '../loader.js'\nimport { classifyDestructive } from './classify.js'\nimport {\n MIGRATIONS_DIRNAME,\n checksumOf,\n readMigrationSql,\n readMigrationWorkspace,\n readSnapshot,\n readSnapshotText,\n renderMigrationSql,\n writeMigration,\n type JournalEntry,\n} from './workspace.js'\n\nexport interface DiffOptions {\n readonly dir: string\n readonly allowDestructive: boolean\n readonly check: boolean\n readonly log: (line: string) => void\n}\n\n/**\n * `orm diff` — append the next committed migration for a definitions\n * directory, diffed against the workspace's tip snapshot. `--check` is the\n * CI gate: no database, no credentials — verify checksums, the snapshot\n * chain, that the definitions match the journal tip, and that regenerating\n * the tip reproduces the committed file byte-for-byte.\n */\nexport async function diffCommand({ dir, allowDestructive, check, log }: DiffOptions): Promise<number> {\n const loaded = await loadNamespaceDefinition(dir)\n const workspace = await readMigrationWorkspace(dir, loaded.definition.namespace)\n const tip = workspace.journal.entries.at(-1)\n\n if (check) return checkWorkspace({ dir, loaded, workspace, tip, log })\n\n if (tip?.content_hash === loaded.contentHash) {\n log(`no changes — ${MIGRATIONS_DIRNAME}/${tip.name}.sql already matches the definitions`)\n return 0\n }\n\n const plan = await planMigration({ definition: loaded.definition, previousSnapshot: workspace.tipSnapshot })\n const destructive = classifyDestructive(plan.statements)\n if (destructive.length > 0 && !allowDestructive) {\n log('destructive migration blocked — these statements lose data:')\n for (const statement of destructive) log(` ${firstLine(statement.sql)} -- ${statement.reason}`)\n log(\"retire columns in two phases (`deprecated: true` first, drop later), declare type changes as `cast:`, or re-run with --allow-destructive to consent\")\n return 1\n }\n\n const written = await writeMigration({\n dir,\n workspace,\n plan,\n contentHash: loaded.contentHash,\n destructive: destructive.length > 0,\n })\n log(\n `wrote ${MIGRATIONS_DIRNAME}/${written.name}.sql — ${plan.statements.length} statement(s)` +\n (written.destructive ? ' (DESTRUCTIVE — consented via --allow-destructive)' : ''),\n )\n return 0\n}\n\nasync function checkWorkspace({\n dir,\n loaded,\n workspace,\n tip,\n log,\n}: {\n dir: string\n loaded: Awaited<ReturnType<typeof loadNamespaceDefinition>>\n workspace: Awaited<ReturnType<typeof readMigrationWorkspace>>\n tip: JournalEntry | undefined\n log: (line: string) => void\n}): Promise<number> {\n if (!tip) {\n log(`no committed migrations for '${loaded.definition.namespace}' — run \\`seq-studio orm diff\\` and commit the result`)\n return 1\n }\n\n let previousId: unknown\n let previousHash: string | null = null\n for (const entry of workspace.journal.entries) {\n const sql = await readMigrationSql(dir, entry)\n if (checksumOf(sql) !== entry.checksum) {\n log(`${MIGRATIONS_DIRNAME}/${entry.name}.sql does not match its journal checksum — committed migrations must not be edited`)\n return 1\n }\n const snapshotText = await readSnapshotText(dir, entry.ordinal)\n if (checksumOf(snapshotText) !== entry.snapshot_checksum) {\n log(`the snapshot for ${entry.name} does not match its journal checksum — committed snapshots must not be edited (the next diff builds on it)`)\n return 1\n }\n const snapshot = JSON.parse(snapshotText) as { id?: unknown; prevId?: unknown }\n if (entry.ordinal > 1 && snapshot.prevId !== previousId) {\n log(`snapshot chain broken at ${entry.name} — regenerate the workspace with \\`seq-studio orm diff\\``)\n return 1\n }\n if (entry.previous_content_hash !== previousHash) {\n log(`content-hash chain broken at ${entry.name} — migrations must be appended in order by \\`seq-studio orm diff\\``)\n return 1\n }\n previousId = snapshot.id\n previousHash = entry.content_hash\n }\n\n if (tip.content_hash !== loaded.contentHash) {\n log(`definitions changed since ${tip.name} — run \\`seq-studio orm diff\\` and commit the new migration`)\n return 1\n }\n\n const previousSnapshot = tip.ordinal > 1 ? await readSnapshot(dir, tip.ordinal - 1) : undefined\n const plan = await planMigration({ definition: loaded.definition, previousSnapshot })\n const regenerated = renderMigrationSql({\n name: tip.name,\n namespace: loaded.definition.namespace,\n contentHash: loaded.contentHash,\n plan,\n })\n if (regenerated !== (await readMigrationSql(dir, tip))) {\n log(`${MIGRATIONS_DIRNAME}/${tip.name}.sql does not regenerate from the definitions — re-run \\`seq-studio orm diff\\``)\n return 1\n }\n\n log(`migrations in sync — ${workspace.journal.entries.length} committed, tip ${tip.name}`)\n return 0\n}\n\nconst firstLine = (sql: string): string => sql.split('\\n')[0] ?? sql\n","import { OrmDefinitionError } from '../errors.js'\nimport { namespaceConfigSchema } from './namespace-config.js'\nimport { buildNamespaceDefinition, type NamespaceDefinition } from './namespace.js'\nimport { tableFileSchema } from './table.js'\n\ninterface CanonicalShape {\n readonly namespace: unknown\n readonly description: string | null\n readonly capabilities: unknown\n readonly tables: readonly Record<string, unknown>[]\n}\n\n/**\n * Rehydrate a stored canonical definition (see hash.ts) back into a validated\n * NamespaceDefinition — predicates re-parse from their source strings, every\n * invariant re-checks. The registry is never trusted blindly: callers compare\n * computeDefinitionHash(result) against the stored content hash.\n */\nexport function parseCanonicalDefinition(value: unknown): NamespaceDefinition {\n const canonical = asCanonicalShape(value)\n const files = canonical.tables.map((table, index) => {\n const input = {\n namespace: canonical.namespace,\n table: table['table'],\n description: table['description'] ?? undefined,\n columns: table['columns'] ?? undefined,\n source: table['source'] ?? undefined,\n links: table['links'] ?? undefined,\n indexes: table['indexes'] ?? undefined,\n policies: canonicalPolicies(table['policies']),\n actions: canonicalActions(table['actions']),\n }\n const parsed = tableFileSchema.safeParse(input)\n if (!parsed.success) {\n const issue = parsed.error.issues[0]\n throw new OrmDefinitionError(\n `stored definition for table ${String(table['table'])} is invalid: ${issue?.message ?? 'unknown issue'}`,\n `canonical[${index}]`,\n )\n }\n return { file: `canonical[${index}]`, table: parsed.data }\n })\n // Re-validate the namespace config through its schema (capabilities block\n // included) — the registry is never trusted blindly; the block's superRefine\n // (cycles, unknown grants) re-runs exactly as it did at authoring.\n const config = namespaceConfigSchema.safeParse({\n namespace: canonical.namespace,\n description: canonical.description ?? undefined,\n capabilities: canonical.capabilities ?? undefined,\n })\n if (!config.success) {\n const issue = config.error.issues[0]\n throw new OrmDefinitionError(`stored namespace config is invalid: ${issue?.message ?? 'unknown issue'}`, 'canonical')\n }\n return buildNamespaceDefinition(files, config.data)\n}\n\nfunction asCanonicalShape(value: unknown): CanonicalShape {\n if (value === null || typeof value !== 'object' || Array.isArray(value)) {\n throw new OrmDefinitionError('stored definition is not an object')\n }\n const record = value as Record<string, unknown>\n if (typeof record['namespace'] !== 'string' || !Array.isArray(record['tables'])) {\n throw new OrmDefinitionError('stored definition is missing namespace/tables')\n }\n return {\n namespace: record['namespace'],\n // Pre-capabilities rows lack both fields — rehydrate as unset.\n description: typeof record['description'] === 'string' ? record['description'] : null,\n capabilities: record['capabilities'] ?? undefined,\n tables: record['tables'] as Record<string, unknown>[],\n }\n}\n\nfunction canonicalPolicies(value: unknown): Record<string, unknown> | undefined {\n if (value === null || typeof value !== 'object') return undefined\n const record = value as Record<string, unknown>\n const policies: Record<string, unknown> = {}\n if (typeof record['read'] === 'string') policies['read'] = record['read']\n if (typeof record['write'] === 'string') policies['write'] = record['write']\n return Object.keys(policies).length > 0 ? policies : undefined\n}\n\nfunction canonicalActions(value: unknown): Record<string, unknown> | undefined {\n if (value === null || typeof value !== 'object') return undefined\n const entries = Object.entries(value as Record<string, Record<string, unknown>>)\n if (entries.length === 0) return undefined\n return Object.fromEntries(\n entries.map(([name, action]) => [\n name,\n {\n description: action['description'] ?? undefined,\n requires: action['requires'] ?? undefined,\n params: action['params'] ?? undefined,\n validates: action['validates'] ?? undefined,\n executes: action['executes'],\n returns: action['returns'] ?? undefined,\n audit: action['audit'] ?? undefined,\n },\n ]),\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/authoring/columns.ts","../src/constants.ts","../src/errors.ts","../src/authoring/registry.ts","../src/authoring/table.ts","../src/canonical/v2.ts","../src/hash.ts","../src/authoring/namespace.ts","../src/authoring/load.ts","../src/codegen/types.ts","../src/predicate/ast.ts","../src/schema/identifiers.ts","../src/schema/columns.ts","../src/predicate/parse.ts","../src/schema/predicates.ts","../src/schema/actions.ts","../src/engine/types.ts","../src/compiler/sql.ts","../src/compiler/predicates.ts","../src/compiler/actions.ts","../src/engine/actions.ts","../src/schema/table.ts","../src/engine/security.ts","../src/engine/columns.ts","../src/engine/tables.ts","../src/engine/snapshot.ts","../src/engine/converge.ts","../src/engine/index.ts","../src/engine/canonical2.ts","../src/ir/index.ts","../src/schema/namespace.ts","../src/schema/namespace-config.ts","../src/loader.ts","../src/migrations/classify.ts","../src/migrations/workspace.ts","../src/migrations/committed.ts","../src/migrations/diff.ts","../src/migrations/from-yaml.ts","../src/migrations/v2.ts","../src/schema/canonical.ts"],"names":["text","z","t","createHash","index","realpath","join","stat","jiti","createJiti","readdir","require","createRequire","sep","COLUMN_TYPES","columnTypeSchema","sql","QUOTED_STRING_PATTERN","policyName","uuid","integer","bigint","numeric","doublePrecision","boolean","timestamp","date","jsonb","pgSchema","uniqueIndex","foreignKey","previousId","generateDrizzleJson","upPgSnapshot","generateMigration","pushSchema","FACTORIES","SCHEMA_IMPORT_KEY","sortByEnforcedLinks","buildTable","buildIndexes","buildForeignKeys","primaryKey","enforcedTargets","findTable","validateCapabilityPins","customRolesBlockSchema","capabilityPinsSchema","readFile","loadYaml","extname","path","mkdir","writeFile"],"mappings":";;;;;;;;;;;;;;;;AAcO,IAAM,YAAA,GAAe;AACrB,IAAM,UAAA,GAAa;AASnB,SAAS,UAAU,KAAA,EAAkC;AAC1D,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,IAAS,MAA6B,IAAA,KAAS,UAAA;AAC/F;AAGO,IAAM,kBAAA,GAAqB,CAAC,mBAAA,EAAqB,OAAO;AAQxD,SAAS,iBAAiB,YAAA,EAA8B;AAC7D,EAAA,OAAO,YAAA,CACJ,QAAQ,oBAAA,EAAsB,OAAO,EACrC,OAAA,CAAQ,uBAAA,EAAyB,OAAO,CAAA,CACxC,WAAA,EAAY;AACjB;AAiBO,IAAM,gBAAN,MAAoB;AAAA,EAChB,IAAA,GAAO,YAAA;AAAA,EAEC,KAAA;AAAA,EAEjB,WAAA,CAAY,MAAsB,UAAA,EAAqB;AACrD,IAAA,IAAA,CAAK,KAAA,GAAQ;AAAA,MACX,IAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA,EAAY,KAAA;AAAA,MACZ,OAAA,EAAS,KAAA;AAAA,MACT,MAAA,EAAQ,KAAA;AAAA,MACR,UAAA,EAAY,KAAA;AAAA,MACZ,YAAA,EAAc,MAAA;AAAA,MACd,SAAA,EAAW,MAAA;AAAA,MACX,WAAA,EAAa,MAAA;AAAA,MACb,WAAA,EAAa,MAAA;AAAA,MACb,IAAA,EAAM,MAAA;AAAA,MACN,UAAA,EAAY;AAAA,KACd;AAAA,EACF;AAAA;AAAA,EAGA,UAAA,GAAmB;AACjB,IAAA,IAAA,CAAK,MAAM,UAAA,GAAa,IAAA;AACxB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAA,GAAgB;AACd,IAAA,IAAA,CAAK,MAAM,OAAA,GAAU,IAAA;AACrB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAA,GAAe;AACb,IAAA,IAAA,CAAK,MAAM,MAAA,GAAS,IAAA;AACpB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAQ,KAAA,EAAmC;AACzC,IAAA,IAAI,KAAA,KAAU,mBAAA,IAAuB,KAAA,KAAU,OAAA,EAAS;AACtD,MAAA,IAAA,CAAK,MAAM,SAAA,GAAY,KAAA;AACvB,MAAA,IAAA,CAAK,MAAM,UAAA,GAAa,KAAA;AACxB,MAAA,IAAA,CAAK,MAAM,YAAA,GAAe,MAAA;AAC1B,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAA,CAAK,MAAM,UAAA,GAAa,IAAA;AACxB,IAAA,IAAA,CAAK,MAAM,YAAA,GAAe,KAAA;AAC1B,IAAA,IAAA,CAAK,MAAM,SAAA,GAAY,MAAA;AACvB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,YAAYA,KAAAA,EAAoB;AAC9B,IAAA,IAAA,CAAK,MAAM,WAAA,GAAcA,KAAAA;AACzB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAGA,YAAY,kBAAA,EAAkC;AAC5C,IAAA,IAAA,CAAK,MAAM,WAAA,GAAc,kBAAA;AACzB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAGA,KAAK,QAAA,EAAwB;AAC3B,IAAA,IAAA,CAAK,MAAM,IAAA,GAAO,QAAA;AAClB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAGA,UAAA,GAAmB;AACjB,IAAA,IAAA,CAAK,MAAM,UAAA,GAAa,IAAA;AACxB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAGA,IAAI,YAAA,GAAwB;AAC1B,IAAA,OAAO,KAAK,KAAA,CAAM,UAAA;AAAA,EACpB;AAAA;AAAA,EAGA,IAAI,QAAA,GAA+B;AACjC,IAAA,OAAO,OAAO,KAAK,KAAA,CAAM,IAAA,KAAS,WAAW,IAAA,CAAK,KAAA,CAAM,KAAK,IAAA,GAAO,MAAA;AAAA,EACtE;AAAA;AAAA,EAGA,cAAc,YAAA,EAA8B;AAC1C,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,UAAA,IAAc,gBAAA,CAAiB,YAAY,CAAA;AAAA,EAC/D;AAAA;AAAA,EAGA,kBAAkB,YAAA,EAAuC;AACvD,IAAA,MAAM,MAAA,GAA0B;AAAA,MAC9B,IAAA,EAAM,YAAA;AAAA,MACN,UAAA,EAAY,IAAA,CAAK,aAAA,CAAc,YAAY,CAAA;AAAA,MAC3C,IAAA,EAAM,OAAO,IAAA,CAAK,KAAA,CAAM,SAAS,QAAA,GAAW,EAAE,IAAA,EAAM,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,IAAA,EAAK,GAAI,KAAK,KAAA,CAAM,IAAA;AAAA,MACxF,UAAU,EAAE,IAAA,CAAK,KAAA,CAAM,OAAA,IAAW,KAAK,KAAA,CAAM,UAAA,CAAA;AAAA,MAC7C,MAAA,EAAQ,KAAK,KAAA,CAAM,MAAA;AAAA,MACnB,UAAA,EAAY,KAAK,KAAA,CAAM;AAAA,KACzB;AACA,IAAA,IAAI,KAAK,KAAA,CAAM,UAAA,SAAmB,OAAA,GAAU,IAAA,CAAK,MAAM,YAAA,IAAgB,IAAA;AACvE,IAAA,IAAI,KAAK,KAAA,CAAM,SAAA,KAAc,QAAW,MAAA,CAAO,SAAA,GAAY,KAAK,KAAA,CAAM,SAAA;AACtE,IAAA,IAAI,KAAK,KAAA,CAAM,WAAA,KAAgB,QAAW,MAAA,CAAO,WAAA,GAAc,KAAK,KAAA,CAAM,WAAA;AAC1E,IAAA,IAAI,KAAK,KAAA,CAAM,WAAA,KAAgB,QAAW,MAAA,CAAO,WAAA,GAAc,KAAK,KAAA,CAAM,WAAA;AAC1E,IAAA,IAAI,KAAK,KAAA,CAAM,IAAA,KAAS,QAAW,MAAA,CAAO,IAAA,GAAO,KAAK,KAAA,CAAM,IAAA;AAC5D,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAEO,SAAS,gBAAgB,KAAA,EAAwC;AACtE,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,IAAS,MAA6B,IAAA,KAAS,YAAA;AAC/F;AAEA,IAAM,MAAA,GACJ,CAAC,IAAA,KACD,CAAC,eACC,IAAI,aAAA,CAAc,MAAM,UAAU,CAAA;AAM/B,IAAM,CAAA,GAAI;AAAA,EACf,IAAA,EAAM,OAAO,MAAM,CAAA;AAAA,EACnB,IAAA,EAAM,OAAO,MAAM,CAAA;AAAA,EACnB,OAAA,EAAS,OAAO,SAAS,CAAA;AAAA,EACzB,MAAA,EAAQ,OAAO,QAAQ,CAAA;AAAA,EACvB,OAAA,EAAS,OAAO,SAAS,CAAA;AAAA,EACzB,MAAA,EAAQ,OAAO,QAAQ,CAAA;AAAA,EACvB,OAAA,EAAS,OAAO,SAAS,CAAA;AAAA,EACzB,WAAA,EAAa,OAAO,aAAa,CAAA;AAAA,EACjC,IAAA,EAAM,OAAO,MAAM,CAAA;AAAA,EACnB,KAAA,EAAO,OAAO,OAAO,CAAA;AAAA,EACrB,IAAA,EAAM,CAAC,GAAA,EAAc,UAAA,KAAuC,IAAI,aAAA,CAAc,EAAE,IAAA,EAAM,GAAA,CAAI,IAAA,EAAK,EAAG,UAAU;AAC9G;;;ACnMO,IAAM,iBAAA,GAAoB;AAE1B,IAAM,kBAAA,GAAqB;AAC3B,IAAM,qBAAA,GAAwB;AAQ9B,IAAM,qBAAA,GAAwB;AAW9B,IAAM,6BAAA,GAAgC;AAUtC,IAAM,sBAAA,GAAyB;AAE/B,IAAM,iBAAA,GAAoB;AAG1B,IAAM,uBAAA,GAA0B;AAGhC,IAAM,qBAAA,GAAwB;AAE9B,IAAM,iBAAA,GAAoB;AAC1B,IAAM,oBAAA,GAAuB;AAE7B,IAAM,gBAAgB,CAAC,SAAA,KAA8B,CAAA,EAAG,iBAAiB,GAAG,SAAS,CAAA;AACrF,IAAM,gBAAA,GAAmB,CAAC,SAAA,KAC/B,CAAA,EAAG,iBAAiB,CAAA,EAAG,SAAS,GAAG,oBAAoB,CAAA;AAElD,IAAM,0BAAA,GAA6B,CAAC,MAAA,EAAQ,OAAO;AAGnD,IAAM,6CAA6B,IAAI,GAAA,CAAI,CAAC,gBAAA,EAAkB,eAAe,CAAC;AAE9E,IAAM,WAAA,GAAc;AAQpB,IAAM,4BAA4B,IAAA,GAAO;AAGzC,IAAM,uCAAuB,IAAI,GAAA,CAAI,CAAC,SAAA,EAAW,OAAO,CAAC;AAOzD,IAAM,qBAAA,uBAA4B,GAAA,CAAI,CAAC,UAAU,OAAA,EAAS,OAAA,EAAS,QAAQ,CAAC;;;ACzE5E,IAAM,kBAAA,GAAN,cAAiC,KAAA,CAAM;AAAA,EAG5C,WAAA,CACE,SACS,IAAA,EACT;AACA,IAAA,KAAA,CAAM,OAAO,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,OAAO,KAAK,OAAO,CAAA;AAFnC,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAGX;AAAA,EAPkB,IAAA,GAAO,oBAAA;AAQ3B;AAEO,IAAM,mBAAA,GAAN,cAAkC,KAAA,CAAM;AAAA,EAG7C,WAAA,CACE,SACS,QAAA,EACT;AACA,IAAA,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,cAAA,EAAiB,QAAQ,CAAA,CAAA,CAAG,CAAA;AAFnC,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA,EAGX;AAAA,EAPkB,IAAA,GAAO,qBAAA;AAQ3B;;;ACOA,IAAM,iBAAA,GAAoB,MAAA,CAAO,GAAA,CAAI,yCAAyC,CAAA;AAE9E,SAAS,YAAA,GAAmC;AAC1C,EAAA,MAAM,MAAA,GAAS,UAAA;AACf,EAAA,MAAM,QAAA,GAAW,OAAO,iBAAiB,CAAA;AACzC,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAG3B,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,MAAM,UAA8B,EAAC;AACrC,EAAA,MAAA,CAAO,iBAAiB,CAAA,GAAI,OAAA;AAC5B,EAAA,OAAO,OAAA;AACT;AAGO,SAAS,qBAAA,GAA0C;AACxD,EAAA,MAAM,OAAA,GAA4B,EAAE,WAAA,EAAa,MAAA,EAAW,MAAA,EAAQ,EAAC,EAAG,KAAA,EAAO,EAAC,EAAG,OAAA,EAAS,EAAC,EAAE;AAC/F,EAAA,YAAA,EAAa,CAAE,KAAK,OAAO,CAAA;AAC3B,EAAA,OAAO,OAAA;AACT;AAGO,SAAS,oBAAoB,OAAA,EAAiC;AACnE,EAAA,MAAM,QAAQ,YAAA,EAAa;AAC3B,EAAA,MAAM,GAAA,GAAM,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AAClC,EAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,IAAA,MAAM,IAAI,MAAM,oGAA+F,CAAA;AAAA,EACjH;AACA,EAAA,KAAA,CAAM,GAAA,EAAI;AACZ;AAEO,SAAS,sBAAA,GAAuD;AACrE,EAAA,MAAM,QAAQ,YAAA,EAAa;AAC3B,EAAA,OAAO,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AAC/B;AAEA,SAAS,QAAA,CAAS,QAAsE,KAAA,EAAsB;AAC5G,EAAA,MAAM,UAAU,sBAAA,EAAuB;AACvC,EAAA,IAAI,CAAC,OAAA,EAAS;AACd,EAAA,OAAA,CAAQ,MAAM,EAAE,IAAA,CAAK,EAAE,OAAO,IAAA,EAAM,OAAA,CAAQ,aAAa,CAAA;AAC3D;AAEO,SAAS,cAAc,KAAA,EAAsB;AAClD,EAAA,QAAA,CAAS,UAAU,KAAK,CAAA;AAC1B;AAEO,SAAS,aAAa,KAAA,EAAsB;AACjD,EAAA,QAAA,CAAS,SAAS,KAAK,CAAA;AACzB;AAEO,SAAS,wBAAwB,KAAA,EAAsB;AAC5D,EAAA,QAAA,CAAS,WAAW,KAAK,CAAA;AAC3B;;;AChEO,IAAM,WAAA,GAAc;AACpB,IAAM,UAAA,GAAa;AA4CnB,SAAS,KAAA,CAAM,QAAkB,OAAA,EAAgC;AACtE,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,UAAA;AAAA,IACN,QAAA,EAAU,OAAA;AAAA,IACV,MAAA;AAAA,IACA,IAAI,OAAA,CAAQ,EAAA;AAAA,IACZ,YAAY,OAAA,CAAQ,UAAA;AAAA,IACpB,OAAA,EAAS,QAAQ,OAAA,IAAW,KAAA;AAAA,IAC5B,aAAa,OAAA,CAAQ;AAAA,GACvB;AACF;AAEO,SAAS,MAAA,CAAO,QAAkB,OAAA,EAAiC;AACxE,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,UAAA;AAAA,IACN,QAAA,EAAU,QAAA;AAAA,IACV,MAAA;AAAA,IACA,IAAI,OAAA,CAAQ,EAAA;AAAA,IACZ,YAAY,OAAA,CAAQ,UAAA;AAAA,IACpB,OAAA,EAAS,KAAA;AAAA,IACT,aAAa,OAAA,CAAQ;AAAA,GACvB;AACF;AAGO,SAAS,eAAe,OAAA,EAAyC;AACtE,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,UAAA;AAAA,IACN,QAAA,EAAU,gBAAA;AAAA,IACV,MAAA,EAAQ,MAAA;AAAA,IACR,IAAI,OAAA,CAAQ,EAAA;AAAA,IACZ,YAAY,OAAA,CAAQ,UAAA;AAAA,IACpB,OAAA,EAAS,KAAA;AAAA,IACT,aAAa,OAAA,CAAQ;AAAA,GACvB;AACF;AAEO,SAAS,UAAU,KAAA,EAAkC;AAC1D,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,IAAS,MAA6B,IAAA,KAAS,UAAA;AAC/F;AA2EO,SAAS,WAAW,KAAA,EAAmC;AAC5D,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,IAAS,MAA6B,IAAA,KAAS,WAAA;AAC/F;AAEA,SAAS,gBAAA,CAAiB,EAAE,KAAA,EAAO,IAAA,EAAM,MAAK,EAAoE;AAChH,EAAA,IAAI,CAAC,kBAAA,CAAmB,IAAA,CAAK,KAAK,CAAA,IAAK,KAAA,CAAM,SAAS,qBAAA,EAAuB;AAC3E,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,GAAG,IAAI,CAAA,EAAA,EAAK,KAAK,CAAA,aAAA,EAAgB,kBAAkB,mBAAmB,qBAAqB,CAAA,WAAA,CAAA;AAAA,MAC3F;AAAA,KACF;AAAA,EACF;AACF;AAEO,SAAS,WAAA,CACd,IAAA,EACA,OAAA,EACA,MAAA,GAAsB,EAAC,EACb;AACV,EAAA,MAAM,IAAA,GAAO,wBAAuB,EAAG,WAAA;AACvC,EAAA,gBAAA,CAAiB,EAAE,KAAA,EAAO,IAAA,EAAM,IAAA,EAAM,YAAA,EAAc,MAAM,CAAA;AAE1D,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA;AACtC,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,OAAA,EAAU,IAAI,yBAAyB,IAAI,CAAA;AAAA,EAC1E;AAEA,EAAA,MAAM,eAAA,uBAAsB,GAAA,EAAoB;AAChD,EAAA,KAAA,MAAW,CAAC,YAAA,EAAc,OAAO,CAAA,IAAK,OAAA,EAAS;AAC7C,IAAA,IAAI,CAAC,eAAA,CAAgB,OAAO,CAAA,EAAG;AAC7B,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,CAAA,OAAA,EAAU,IAAI,CAAA,WAAA,EAAc,YAAY,CAAA,mFAAA,CAAA;AAAA,QACxC;AAAA,OACF;AAAA,IACF;AACA,IAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,aAAA,CAAc,YAAY,CAAA;AACrD,IAAA,gBAAA,CAAiB,EAAE,KAAA,EAAO,UAAA,EAAY,IAAA,EAAM,CAAA,OAAA,EAAU,IAAI,CAAA,WAAA,EAAc,YAAY,CAAA,aAAA,CAAA,EAAiB,IAAA,EAAM,CAAA;AAC3G,IAAA,MAAM,QAAA,GAAW,eAAA,CAAgB,GAAA,CAAI,UAAU,CAAA;AAC/C,IAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,UAAU,IAAI,CAAA,YAAA,EAAe,QAAQ,CAAA,OAAA,EAAU,YAAY,kCAAkC,UAAU,CAAA,CAAA,CAAA;AAAA,QACvG;AAAA,OACF;AAAA,IACF;AACA,IAAA,eAAA,CAAgB,GAAA,CAAI,YAAY,YAAY,CAAA;AAAA,EAC9C;AAEA,EAAA,MAAM,KAAA,GAAkB,EAAE,IAAA,EAAM,WAAA,EAAa,SAAA,EAAW,MAAM,OAAA,EAAS,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAW,IAAA,EAAK;AACvG,EAAA,aAAA,CAAc,KAAK,CAAA;AACnB,EAAA,OAAO,KAAA;AACT;AAQO,SAAS,iBAAA,CAAkB,MAAc,MAAA,EAAqC;AACnF,EAAA,MAAM,IAAA,GAAO,wBAAuB,EAAG,WAAA;AACvC,EAAA,gBAAA,CAAiB,EAAE,KAAA,EAAO,IAAA,EAAM,IAAA,EAAM,YAAA,EAAc,MAAM,CAAA;AAC1D,EAAA,IAAI,CAAC,qBAAA,CAAsB,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,EAAG;AAC9C,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,iBAAiB,IAAI,CAAA,WAAA,EAAc,MAAA,CAAO,MAAM,gBAAgB,qBAAqB,CAAA,kBAAA,CAAA;AAAA,MACrF;AAAA,KACF;AAAA,EACF;AACA,EAAA,MAAM,KAAA,GAAkB;AAAA,IACtB,IAAA,EAAM,WAAA;AAAA,IACN,SAAA,EAAW,IAAA;AAAA,IACX,SAAS,EAAC;AAAA,IACV,MAAA,EAAQ,OAAO,WAAA,KAAgB,MAAA,GAAY,EAAE,WAAA,EAAa,MAAA,CAAO,WAAA,EAAY,GAAI,EAAC;AAAA,IAClF,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf;AAAA,GACF;AACA,EAAA,aAAA,CAAc,KAAK,CAAA;AACnB,EAAA,OAAO,KAAA;AACT;AAMO,SAAS,UAAA,CAAW,MAAc,MAAA,EAAoC;AAC3E,EAAA,MAAM,IAAA,GAAO,wBAAuB,EAAG,WAAA;AACvC,EAAA,gBAAA,CAAiB,EAAE,KAAA,EAAO,IAAA,EAAM,IAAA,EAAM,WAAA,EAAa,MAAM,CAAA;AACzD,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,IAAK,MAAA,CAAO,SAAS,GAAA,EAAK;AAC9C,IAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,MAAA,EAAS,IAAI,2CAA2C,IAAI,CAAA;AAAA,EAC3F;AACA,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,IAAK,KAAA,CAAM,SAAS,qBAAA,EAAuB;AAC9D,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,CAAA,MAAA,EAAS,IAAI,CAAA,SAAA,EAAY,IAAA,CAAK,UAAU,KAAK,CAAC,cAAc,qBAAqB,CAAA,WAAA,CAAA;AAAA,QACjF;AAAA,OACF;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,EAAG;AACnB,MAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,MAAA,EAAS,IAAI,CAAA,4BAAA,EAA+B,KAAK,KAAK,IAAI,CAAA;AAAA,IACzF;AACA,IAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA,EAChB;AACA,EAAA,MAAM,GAAA,GAAe,EAAE,IAAA,EAAM,UAAA,EAAY,MAAM,MAAA,EAAQ,CAAC,GAAG,MAAM,CAAA,EAAE;AACnE,EAAA,YAAA,CAAa,GAAG,CAAA;AAChB,EAAA,OAAO,GAAA;AACT;AC1QO,IAAM,gBAAA,GAAmB;AAGzB,IAAM,aAAA,GAAgB;AAC7B,IAAM,UAAA,GAAaC,KAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,EAAE,CAAA,CAAE,KAAA,CAAM,aAAa,CAAA;AAGzD,IAAM,YAAA,GAAe;AAAA,EAC1B,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,SAAA;AAAA,EAAW,QAAA;AAAA,EAAU,SAAA;AAAA,EAAW,QAAA;AAAA,EAChD,SAAA;AAAA,EAAW,aAAA;AAAA,EAAe,MAAA;AAAA,EAAQ;AACpC,CAAA;AAGA,IAAM,gBAAA,GAAmBA,KAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAGrC,IAAM,mBAAA,GAAsBA,MAAE,MAAA,CAAO;AAAA,EAC1C,IAAA,EAAM,UAAA;AAAA,EACN,QAAQA,KAAA,CAAE,KAAA,CAAMA,KAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,EAAE,CAAC,CAAA,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,GAAG;AAC3D,CAAC;AAGM,IAAM,qBAAA,GAAwBA,MAAE,MAAA,CAAO;AAAA;AAAA,EAE5C,IAAA,EAAMA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,EAAE,CAAA;AAAA,EAC9B,UAAA,EAAY,UAAA;AAAA,EACZ,IAAA,EAAMA,KAAA,CAAE,KAAA,CAAM,CAAC,gBAAA,EAAkBA,KAAA,CAAE,MAAA,CAAO,EAAE,IAAA,EAAM,UAAA,EAAY,CAAC,CAAC,CAAA;AAAA,EAChE,QAAA,EAAUA,KAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI,CAAA;AAAA,EAClC,MAAA,EAAQA,KAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA;AAAA;AAAA,EAEjC,SAASA,KAAA,CAAE,KAAA,CAAM,CAACA,KAAA,CAAE,MAAA,IAAUA,KAAA,CAAE,MAAA,EAAO,EAAGA,KAAA,CAAE,SAAQ,EAAGA,KAAA,CAAE,MAAM,CAAC,EAAE,QAAA,EAAS;AAAA,EAC3E,SAAA,EAAWA,MAAE,IAAA,CAAK,CAAC,qBAAqB,OAAO,CAAC,EAAE,QAAA,EAAS;AAAA,EAC3D,aAAaA,KAAA,CAAE,MAAA,GAAS,GAAA,CAAI,GAAG,EAAE,QAAA,EAAS;AAAA;AAAA,EAE1C,WAAA,EAAa,WAAW,QAAA,EAAS;AAAA,EACjC,MAAMA,KAAA,CAAE,MAAA,GAAS,GAAA,CAAI,GAAG,EAAE,QAAA,EAAS;AAAA,EACnC,UAAA,EAAYA,KAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK;AACvC,CAAC;AAGM,IAAM,mBAAA,GAAsBA,MAAE,MAAA,CAAO;AAAA,EAC1C,IAAA,EAAMA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,EAAE,CAAA;AAAA,EAC9B,MAAMA,KAAA,CAAE,IAAA,CAAK,CAAC,OAAA,EAAS,QAAA,EAAU,gBAAgB,CAAC,CAAA;AAAA;AAAA,EAElD,MAAA,EAAQ,WAAW,QAAA,EAAS;AAAA;AAAA,EAE5B,EAAA,EAAI,UAAA;AAAA;AAAA,EAEJ,UAAA,EAAY,WAAW,QAAA,EAAS;AAAA;AAAA,EAEhC,OAAA,EAASA,KAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA;AAAA,EAClC,aAAaA,KAAA,CAAE,MAAA,GAAS,GAAA,CAAI,GAAG,EAAE,QAAA;AACnC,CAAC;AAGM,IAAM,oBAAA,GAAuBA,MAAE,MAAA,CAAO;AAAA,EAC3C,SAASA,KAAA,CAAE,KAAA,CAAM,UAAU,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,EAClC,MAAA,EAAQA,KAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA;AAAA,EACjC,IAAA,EAAM,WAAW,QAAA;AACnB,CAAC;AAOM,IAAM,mBAAA,GAAsBA,MAAE,MAAA,CAAO;AAAA;AAAA,EAE1C,IAAA,EAAMA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,GAAI,CAAA;AAAA;AAAA,EAEhC,KAAA,EAAOA,KAAA,CAAE,OAAA,CAAQ,IAAI,EAAE,QAAA,EAAS;AAAA,EAChC,MAAA,EAAQA,KAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAI,CAAA,CAAE,QAAA;AACtC,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAO,CAAA,CAAE,UAAU,IAAA,MAAW,OAAO,CAAA,CAAE,MAAA,KAAW,QAAA,CAAA,EAAW;AAAA,EACtE,OAAA,EAAS;AACX,CAAC;AAEM,IAAM,sBAAA,GAAyBA,MAAE,KAAA,CAAM;AAAA,EAC5CA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,GAAI,CAAA;AAAA,EAC1BA,MAAE,MAAA,CAAO;AAAA,IACP,OAAA,EAASA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,GAAI,CAAA;AAAA,IACnC,QAAA,EAAUA,KAAA,CAAE,KAAA,CAAM,mBAAmB,CAAA,CAAE,IAAI,EAAE,CAAA,CAAE,OAAA,CAAQ,EAAE;AAAA,GAC1D;AACH,CAAC;AAGM,IAAM,uBAAA,GAA0BA,MAAE,MAAA,CAAO;AAAA,EAC9C,IAAA,EAAM,uBAAuB,QAAA,EAAS;AAAA,EACtC,KAAA,EAAO,uBAAuB,QAAA;AAChC,CAAC;AAGM,IAAM,qBAAA,GAAwBA,MAAE,MAAA,CAAO;AAAA,EAC5C,IAAA,EAAM,UAAA;AAAA,EACN,UAAUA,KAAA,CAAE,MAAA,GAAS,GAAA,CAAI,GAAI,EAAE,QAAA,EAAS;AAAA,EACxC,QAAQA,KAAA,CAAE,MAAA,CAAOA,MAAE,MAAA,EAAO,EAAGA,MAAE,MAAA,CAAO;AAAA,IACpC,IAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAUA,KAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK;AAAA,GACpC,CAAC,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EACd,QAAA,EAAUA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,GAAM,CAAA;AAAA,EACtC,OAAA,EAASA,KAAA,CAAE,IAAA,CAAK,CAAC,MAAA,EAAQ,gBAAgB,QAAQ,CAAC,CAAA,CAAE,OAAA,CAAQ,cAAc,CAAA;AAAA,EAC1E,KAAA,EAAOA,KAAA,CAAE,MAAA,CAAO,EAAE,QAAQA,KAAA,CAAE,MAAA,EAAO,EAAG,QAAA,EAAUA,KAAA,CAAE,MAAA,EAAO,EAAG,EAAE,QAAA;AAChE,CAAC;AAEM,IAAM,oBAAA,GAAuBA,MAAE,MAAA,CAAO;AAAA,EAC3C,KAAA,EAAO,UAAA;AAAA,EACP,aAAaA,KAAA,CAAE,MAAA,GAAS,GAAA,CAAI,GAAI,EAAE,QAAA,EAAS;AAAA;AAAA,EAE3C,WAAA,EAAa,WAAW,QAAA,EAAS;AAAA;AAAA,EAEjC,QAAQA,KAAA,CAAE,MAAA,GAAS,KAAA,CAAM,yBAAyB,EAAE,QAAA,EAAS;AAAA,EAC7D,SAASA,KAAA,CAAE,KAAA,CAAM,qBAAqB,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EAClD,UAAA,EAAYA,KAAA,CAAE,KAAA,CAAM,UAAU,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EACvD,OAAOA,KAAA,CAAE,KAAA,CAAM,mBAAmB,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EAC9C,SAASA,KAAA,CAAE,KAAA,CAAM,oBAAoB,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EACjD,QAAA,EAAU,uBAAA,CAAwB,OAAA,CAAQ,EAAE,CAAA;AAAA,EAC5C,SAASA,KAAA,CAAE,KAAA,CAAM,qBAAqB,CAAA,CAAE,OAAA,CAAQ,EAAE;AACpD,CAAC;AAGM,IAAM,yBAAA,GAA4BA,MAAE,MAAA,CAAO;AAAA,EAChD,iBAAA,EAAmBA,KAAA,CAAE,OAAA,CAAQ,gBAAgB,CAAA;AAAA,EAC7C,SAAA,EAAW,UAAA,CAAW,GAAA,CAAI,EAAE,CAAA;AAAA,EAC5B,aAAaA,KAAA,CAAE,MAAA,GAAS,GAAA,CAAI,GAAI,EAAE,QAAA,EAAS;AAAA,EAC3C,OAAOA,KAAA,CAAE,KAAA,CAAM,mBAAmB,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EAC9C,MAAA,EAAQA,MAAE,KAAA,CAAM,oBAAoB,EAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA;AAAA;AAAA,EAEpD,YAAA,EAAcA,MAAE,MAAA,CAAO;AAAA,IACrB,KAAA,EAAOA,KAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,IAC5B,IAAA,EAAMA,MAAE,KAAA,CAAMA,KAAA,CAAE,QAAQ,CAAA,CAAE,OAAA,CAAQ,EAAE;AAAA,GACrC,CAAA,CAAE,OAAA,CAAQ,EAAE,IAAA,EAAM,IAAI;AACzB,CAAC;AAUM,SAAS,mBAAmB,UAAA,EAAsD;AACvF,EAAA,MAAM,aAAa,CAA6B,KAAA,KAC9C,CAAC,GAAG,KAAK,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,IAAA,CAAK,aAAA,CAAc,CAAA,CAAE,IAAI,CAAC,CAAA;AACxD,EAAA,OAAO;AAAA,IACL,GAAG,UAAA;AAAA,IACH,KAAA,EAAO,UAAA,CAAW,UAAA,CAAW,KAAK,CAAA;AAAA,IAClC,QAAQ,CAAC,GAAG,WAAW,MAAM,CAAA,CAC1B,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,KAAA,CAAM,cAAc,CAAA,CAAE,KAAK,CAAC,CAAA,CAC7C,GAAA,CAAI,CAACC,EAAAA,MAAO;AAAA,MACX,GAAGA,EAAAA;AAAA,MACH,KAAA,EAAO,UAAA,CAAWA,EAAAA,CAAE,KAAK,CAAA;AAAA,MACzB,OAAA,EAAS,CAAC,GAAGA,EAAAA,CAAE,OAAO,EAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAA,CAC9B,CAAA,CAAE,IAAA,IAAQ,EAAE,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA,EAAG,aAAA,CAAc,CAAA,CAAE,IAAA,IAAQ,CAAA,CAAE,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAC,CAAC,CAAA;AAAA,MAC9E,OAAA,EAAS,UAAA,CAAWA,EAAAA,CAAE,OAAO;AAAA,KAC/B,CAAE;AAAA,GACN;AACF;AC7JO,SAAS,WAAW,KAAA,EAAwB;AACjD,EAAA,IAAI,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AAC5E,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,KAAA,CAAM,GAAA,CAAI,UAAU,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AACpE,EAAA,MAAM,UAAU,MAAA,CAAO,OAAA,CAAQ,KAAgC,CAAA,CAC5D,MAAA,CAAO,CAAC,GAAG,UAAU,CAAA,KAAM,UAAA,KAAe,MAAS,CAAA,CACnD,IAAA,CAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA,KAAO,CAAA,GAAI,IAAI,EAAA,GAAK,CAAE,EACnC,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,UAAU,MAAM,CAAA,EAAG,IAAA,CAAK,UAAU,GAAG,CAAC,IAAI,UAAA,CAAW,UAAU,CAAC,CAAA,CAAE,CAAA;AAChF,EAAA,OAAO,CAAA,CAAA,EAAI,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAC9B;AAGA,SAAS,YAAY,KAAA,EAA2B;AAC9C,EAAA,IAAI,KAAA,IAAS,MAAM,OAAO,IAAA;AAC1B,EAAA,IAAI,KAAA,CAAM,QAAQ,KAAK,CAAA,SAAU,KAAA,CAAM,MAAA,KAAW,IAAI,IAAA,GAAQ,KAAA;AAC9D,EAAA,IAAI,OAAO,UAAU,QAAA,IAAY,MAAA,CAAO,KAAK,KAAK,CAAA,CAAE,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AACzE,EAAA,OAAO,KAAA;AACT;AAGA,SAAS,eAAe,KAAA,EAA6B;AACnD,EAAA,OAAO;AAAA,IACL,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,WAAA,EAAa,MAAM,WAAA,IAAe,IAAA;AAAA,IAClC,OAAA,EAAU,MAAM,OAAA,IAAW,IAAA;AAAA,IAC3B,MAAA,EAAQ,MAAM,MAAA,IAAU,IAAA;AAAA,IACxB,KAAA,EAAO,WAAA,CAAY,KAAA,CAAM,KAAK,CAAA;AAAA,IAC9B,OAAA,EAAS,WAAA,CAAY,KAAA,CAAM,OAAO,CAAA;AAAA,IAClC,QAAA,EAAU;AAAA,MACR,IAAA,EAAM,KAAA,CAAM,QAAA,EAAU,IAAA,EAAM,MAAA,IAAU,IAAA;AAAA,MACtC,KAAA,EAAO,KAAA,CAAM,QAAA,EAAU,KAAA,EAAO,MAAA,IAAU;AAAA,KAC1C;AAAA,IACA,OAAA,EAAS,WAAA;AAAA,MACP,MAAA,CAAO,WAAA;AAAA,QACL,MAAA,CAAO,OAAA,CAAQ,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,MAAM,CAAA,KAAM;AAAA,UAC1D,IAAA;AAAA,UACA;AAAA,YACE,WAAA,EAAa,OAAO,WAAA,IAAe,IAAA;AAAA,YACnC,QAAA,EAAU,MAAA,CAAO,QAAA,EAAU,MAAA,IAAU,IAAA;AAAA,YACrC,MAAA,EAAQ,WAAA,CAAY,MAAA,CAAO,MAAM,CAAA;AAAA,YACjC,SAAA,EAAW,YAAY,MAAA,CAAO,SAAA,EAAW,IAAI,CAAC,KAAA,KAAU,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,YACrE,UAAU,MAAA,CAAO,QAAA;AAAA,YACjB,OAAA,EAAS,WAAA,CAAY,MAAA,CAAO,OAAO,CAAA;AAAA,YACnC,KAAA,EAAQ,OAAO,KAAA,IAAS;AAAA;AAC1B,SACD;AAAA;AACH;AACF,GACF;AACF;AASA,SAAS,sBAAsB,YAAA,EAAgD;AAC7E,EAAA,MAAM,EAAE,WAAA,EAAa,YAAA,EAAc,QAAA,KAAa,YAAA,CAAa,KAAA;AAC7D,EAAA,MAAM,OAAA,GACJ,MAAA,CAAO,IAAA,CAAK,WAAW,EAAE,MAAA,KAAW,CAAA,IAAK,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,CAAE,MAAA,KAAW,CAAA,IAAK,YAAA,CAAa,KAAK,MAAA,KAAW,CAAA;AAC9G,EAAA,IAAI,SAAS,OAAO,IAAA;AAGpB,EAAA,OAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,aAAa,MAAA,CAAO,WAAA;AAAA,QACjB,MAAA,CAAO,QAAQ,WAAW,CAAA,CAAiC,IAAI,CAAC,CAAC,GAAA,EAAK,GAAG,CAAA,KAAM;AAAA,UAC9E,GAAA;AAAA,UACA;AAAA,YACE,GAAI,IAAI,WAAA,KAAgB,MAAA,GAAY,EAAE,WAAA,EAAa,GAAA,CAAI,WAAA,EAAY,GAAI,EAAC;AAAA,YACxE,SAAS,GAAA,CAAI,OAAA;AAAA,YACb,UAAU,CAAC,GAAG,GAAA,CAAI,QAAQ,EAAE,IAAA,EAAK;AAAA,YACjC,QAAQ,CAAC,GAAG,GAAA,CAAI,MAAM,EAAE,IAAA;AAAK;AAC/B,SACD;AAAA,OACH;AAAA,MACA,cAAc,MAAA,CAAO,WAAA;AAAA,QAClB,MAAA,CAAO,QAAQ,QAAQ,CAAA,CAAwC,IAAI,CAAC,CAAC,GAAA,EAAK,GAAG,CAAA,KAAM;AAAA,UAClF,GAAA;AAAA,UACA,GAAA,CAAI,gBAAgB,MAAA,GAAY,EAAE,aAAa,GAAA,CAAI,WAAA,KAAgB;AAAC,SACrE;AAAA;AACH,KACF;AAAA,IACA,MAAM,CAAC,GAAG,YAAA,CAAa,IAAI,EAAE,IAAA;AAAK,GACpC;AACF;AAEO,SAAS,uBAAuB,UAAA,EAA4C;AACjF,EAAA,OAAO;AAAA,IACL,WAAW,UAAA,CAAW,SAAA;AAAA,IACtB,aAAa,UAAA,CAAW,WAAA;AAAA,IACxB,YAAA,EAAc,qBAAA,CAAsB,UAAA,CAAW,YAAY,CAAA;AAAA,IAC3D,MAAA,EAAQ,UAAA,CAAW,MAAA,CAAO,GAAA,CAAI,cAAc;AAAA,GAC9C;AACF;AAEO,SAAS,sBAAsB,UAAA,EAAyC;AAC7E,EAAA,OAAOC,iBAAA,CAAW,QAAQ,CAAA,CACvB,MAAA,CAAO,WAAW,CAAA,CAClB,MAAA,CAAO,UAAA,CAAW,sBAAA,CAAuB,UAAU,CAAC,CAAC,CAAA,CACrD,OAAO,KAAK,CAAA;AACjB;;;ACnFO,IAAM,sBAAA,GAAyB;AAuB/B,SAAS,qBAAqB,KAAA,EAA6C;AAChF,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,IAAS,MAA6B,IAAA,KAAS,sBAAA;AAE1F;AAEO,SAAS,gBAAgB,KAAA,EAAiD;AAC/E,EAAA,MAAM,IAAA,GAAO,wBAAuB,EAAG,WAAA;AACvC,EAAA,IAAI,CAAC,iBAAA,CAAkB,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA,EAAG;AAC5C,IAAA,MAAM,IAAI,mBAAmB,CAAA,WAAA,EAAc,KAAA,CAAM,SAAS,CAAA,aAAA,EAAgB,iBAAiB,IAAI,IAAI,CAAA;AAAA,EACrG;AACA,EAAA,MAAM,MAAA,GAA6B;AAAA,IACjC,IAAA,EAAM,sBAAA;AAAA,IACN,WAAW,KAAA,CAAM,SAAA;AAAA,IACjB,aAAa,KAAA,CAAM,WAAA;AAAA,IACnB,YAAA,EAAc,KAAA,CAAM,YAAA,IAAgB,EAAC;AAAA,IACrC;AAAA,GACF;AACA,EAAA,uBAAA,CAAwB,MAAM,CAAA;AAC9B,EAAA,OAAO,MAAA;AACT;AAiBO,SAAS,mBAAmB,KAAA,EAAqD;AACtF,EAAA,MAAM,EAAE,MAAA,EAAQ,MAAA,EAAO,GAAI,KAAA;AAC3B,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,IAAS,EAAC;AAE9B,EAAA,MAAM,YAAA,uBAAmB,GAAA,EAAsB;AAC/C,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAM,QAAA,GAAW,YAAA,CAAa,GAAA,CAAI,KAAA,CAAM,SAAS,CAAA;AACjD,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,CAAA,iBAAA,EAAoB,KAAA,CAAM,SAAS,CAAA,cAAA,EAAiB,YAAA,CAAa,QAAQ,CAAC,CAAA,KAAA,EAAQ,YAAA,CAAa,KAAK,CAAC,CAAA,CAAA,CAAA;AAAA,QACrG,KAAA,CAAM;AAAA,OACR;AAAA,IACF;AACA,IAAA,YAAA,CAAa,GAAA,CAAI,KAAA,CAAM,SAAA,EAAW,KAAK,CAAA;AAAA,EACzC;AAEA,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAAqB;AAC7C,EAAA,KAAA,MAAW,OAAO,KAAA,EAAO;AACvB,IAAA,IAAI,WAAA,CAAY,GAAA,CAAI,GAAA,CAAI,IAAI,CAAA,EAAG;AAC7B,MAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,gBAAA,EAAmB,IAAI,IAAI,CAAA,CAAA,CAAA,EAAK,OAAO,IAAI,CAAA;AAAA,IAC1E;AACA,IAAA,WAAA,CAAY,GAAA,CAAI,GAAA,CAAI,IAAA,EAAM,GAAG,CAAA;AAAA,EAC/B;AAEA,EAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,mBAAA,CAAoB,EAAE,KAAA,EAAO,YAAA,EAAc,WAAA,EAAa,CAAC,CAAA;AACvG,EAAA,MAAM,cAAA,GAAkC,CAAC,GAAG,WAAA,CAAY,QAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,IAC9E,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,MAAA,EAAQ,CAAC,GAAG,GAAA,CAAI,MAAM;AAAA,GACxB,CAAE,CAAA;AAEF,EAAA,MAAM,SAAA,GAAuD;AAAA,IAC3D,iBAAA,EAAmB,gBAAA;AAAA,IACnB,WAAW,MAAA,CAAO,SAAA;AAAA,IAClB,KAAA,EAAO,cAAA;AAAA,IACP,MAAA,EAAQ,eAAA;AAAA,IACR,YAAA,EAAc;AAAA,MACZ,GAAI,MAAA,CAAO,YAAA,CAAa,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,MAAA,CAAO,YAAA,CAAa,KAAA,EAAM,GAAI,EAAC;AAAA,MACtF,MAAM,CAAC,GAAI,OAAO,YAAA,CAAa,IAAA,IAAQ,EAAG;AAAA;AAC5C,GACF;AACA,EAAA,IAAI,MAAA,CAAO,WAAA,KAAgB,MAAA,EAAW,SAAA,CAAU,cAAc,MAAA,CAAO,WAAA;AAErE,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,yBAAA,CAA0B,MAAM,SAAS,CAAA;AAAA,EACpD,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,KAAA,YAAiBF,MAAE,QAAA,EAAU;AAC/B,MAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,WAAA,EAAc,MAAA,CAAO,SAAS,CAAA,GAAA,EAAM,eAAA,CAAgB,KAAK,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,IAAI,CAAA;AAAA,IACxG;AACA,IAAA,MAAM,KAAA;AAAA,EACR;AACA,EAAA,OAAO,mBAAmB,MAAM,CAAA;AAClC;AAGO,SAAS,qBAAqB,UAAA,EAAyC;AAC5E,EAAA,OAAOE,iBAAAA,CAAW,QAAQ,CAAA,CAAE,MAAA,CAAO,WAAW,CAAA,CAAE,MAAA,CAAO,UAAA,CAAW,UAAU,CAAC,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA;AAC7F;AAYA,SAAS,mBAAA,CAAoB,EAAE,KAAA,EAAO,YAAA,EAAc,aAAY,EAAsC;AACpG,EAAA,MAAM,SAAA,GAAkD;AAAA,IACtD,OAAO,KAAA,CAAM,SAAA;AAAA,IACb,SAAS,EAAC;AAAA,IACV,OAAO,EAAC;AAAA,IACR,SAAS,EAAC;AAAA,IACV,UAAU,EAAC;AAAA,IACX,SAAS;AAAC,GACZ;AACA,EAAA,IAAI,MAAM,MAAA,CAAO,WAAA,KAAgB,QAAW,SAAA,CAAU,WAAA,GAAc,MAAM,MAAA,CAAO,WAAA;AACjF,EAAA,IAAI,MAAM,MAAA,CAAO,WAAA,KAAgB,QAAW,SAAA,CAAU,WAAA,GAAc,MAAM,MAAA,CAAO,WAAA;AACjF,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,MAAA,EAAW,SAAA,CAAU,SAAS,KAAA,CAAM,MAAA;AAGzD,EAAA,MAAM,gBAA0B,EAAC;AACjC,EAAA,KAAA,MAAW,CAAC,cAAc,OAAO,CAAA,IAAK,OAAO,OAAA,CAAQ,KAAA,CAAM,OAAO,CAAA,EAAG;AACnE,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,iBAAA,CAAkB,YAAY,CAAA;AACrD,IAAA,MAAM,WAAW,OAAA,CAAQ,QAAA;AACzB,IAAA,IAAI,aAAa,MAAA,IAAa,CAAC,WAAA,CAAY,GAAA,CAAI,QAAQ,CAAA,EAAG;AACxD,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,UAAU,KAAA,CAAM,SAAS,CAAA,WAAA,EAAc,YAAY,sBAAsB,QAAQ,CAAA,4FAAA,CAAA;AAAA,QACjF,KAAA,CAAM;AAAA,OACR;AAAA,IACF;AACA,IAAA,IAAI,OAAA,CAAQ,YAAA,EAAc,aAAA,CAAc,IAAA,CAAK,OAAO,UAAU,CAAA;AAC9D,IAAA,SAAA,CAAU,OAAA,EAAS,KAAK,MAAM,CAAA;AAAA,EAChC;AAGA,EAAA,IAAI,KAAA,CAAM,MAAA,CAAO,UAAA,KAAe,MAAA,EAAW;AACzC,IAAA,IAAI,aAAA,CAAc,SAAS,CAAA,EAAG;AAC5B,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,CAAA,OAAA,EAAU,MAAM,SAAS,CAAA,yGAAA,CAAA;AAAA,QACzB,KAAA,CAAM;AAAA,OACR;AAAA,IACF;AACA,IAAA,SAAA,CAAU,UAAA,GAAa,KAAA,CAAM,MAAA,CAAO,UAAA,CAAW,GAAA;AAAA,MAAI,CAAC,QAClD,gBAAA,CAAiB,EAAE,OAAO,GAAA,EAAK,IAAA,EAAM,cAAc;AAAA,KACrD;AAAA,EACF,CAAA,MAAA,IAAW,aAAA,CAAc,MAAA,GAAS,CAAA,EAAG;AACnC,IAAA,SAAA,CAAU,UAAA,GAAa,aAAA;AAAA,EACzB;AAGA,EAAA,KAAA,MAAWC,MAAAA,IAAS,KAAA,CAAM,MAAA,CAAO,OAAA,IAAW,EAAC,EAAG;AAC9C,IAAA,MAAM,KAAA,GAAgE;AAAA,MACpE,OAAA,EAASA,MAAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,KAAQ,gBAAA,CAAiB,EAAE,KAAA,EAAO,GAAA,EAAK,IAAA,EAAM,OAAA,EAAS,CAAC;AAAA,KACrF;AACA,IAAA,IAAIA,MAAAA,CAAM,MAAA,KAAW,MAAA,EAAW,KAAA,CAAM,SAASA,MAAAA,CAAM,MAAA;AACrD,IAAA,IAAIA,MAAAA,CAAM,IAAA,KAAS,MAAA,EAAW,KAAA,CAAM,OAAOA,MAAAA,CAAM,IAAA;AACjD,IAAA,SAAA,CAAU,OAAA,EAAS,KAAK,KAAK,CAAA;AAAA,EAC/B;AAGA,EAAA,KAAA,MAAW,CAAC,QAAA,EAAU,IAAI,CAAA,IAAK,MAAA,CAAO,OAAA,CAAQ,KAAA,CAAM,MAAA,CAAO,KAAA,IAAS,EAAE,CAAA,EAAG;AACvE,IAAA,SAAA,CAAU,KAAA,EAAO,KAAK,kBAAA,CAAmB,EAAE,OAAO,QAAA,EAAU,IAAA,EAAM,YAAA,EAAc,CAAC,CAAA;AAAA,EACnF;AAGA,EAAA,MAAM,WAAkE,EAAC;AACzE,EAAA,IAAI,KAAA,CAAM,MAAA,CAAO,QAAA,EAAU,IAAA,KAAS,MAAA,EAAW,QAAA,CAAS,IAAA,GAAO,iBAAA,CAAkB,KAAA,CAAM,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA;AAC3G,EAAA,IAAI,KAAA,CAAM,MAAA,CAAO,QAAA,EAAU,KAAA,KAAU,MAAA,EAAW,QAAA,CAAS,KAAA,GAAQ,iBAAA,CAAkB,KAAA,CAAM,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA;AAC9G,EAAA,SAAA,CAAU,QAAA,GAAW,QAAA;AAGrB,EAAA,KAAA,MAAW,MAAA,IAAU,KAAA,CAAM,MAAA,CAAO,OAAA,IAAW,EAAC,EAAG;AAC/C,IAAA,SAAA,CAAU,SAAS,IAAA,CAAK;AAAA,MACtB,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,GAAI,OAAO,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,EAAU,MAAA,CAAO,QAAA,EAAS,GAAI,EAAC;AAAA,MACrE,QAAQ,MAAA,CAAO,WAAA;AAAA,QACb,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,MAAA,IAAU,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,KAAK,CAAA,KAAM;AAAA,UACzD,IAAA;AAAA,UACA,EAAE,IAAA,EAAM,KAAA,CAAM,MAAM,QAAA,EAAU,KAAA,CAAM,YAAY,KAAA;AAAM,SACvD;AAAA,OACH;AAAA,MACA,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,OAAA,EAAS,OAAO,OAAA,IAAW,cAAA;AAAA,MAC3B,GAAI,OAAO,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,MAAA,CAAO,KAAA,EAAM,GAAI;AAAC,KAC7D,CAAA;AAAA,EACH;AAEA,EAAA,IAAI;AACF,IAAA,OAAO,oBAAA,CAAqB,MAAM,SAAS,CAAA;AAAA,EAC7C,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,KAAA,YAAiBH,MAAE,QAAA,EAAU;AAC/B,MAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,OAAA,EAAU,KAAA,CAAM,SAAS,CAAA,GAAA,EAAM,eAAA,CAAgB,KAAK,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,IAAI,CAAA;AAAA,IAClG;AACA,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AAEA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,EAKwC;AACtC,EAAA,MAAM,IAAA,GAAO,CAAC,OAAA,KAA2B;AACvC,IAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,OAAA,EAAU,KAAA,CAAM,SAAS,CAAA,SAAA,EAAY,QAAQ,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA,EAAI,KAAA,CAAM,IAAI,CAAA;AAAA,EACtG,CAAA;AAEA,EAAA,IAAI,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,QAAA,KAAa,OAAA,EAAS;AAC7C,IAAA,OAAO,KAAK,4DAA4D,CAAA;AAAA,EAC1E;AAEA,EAAA,IAAI,IAAA,CAAK,aAAa,gBAAA,EAAkB;AACtC,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,MAAA,EAAW,OAAO,KAAK,uDAAuD,CAAA;AAClG,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,QAAA;AAAA,MACN,IAAA,EAAM,gBAAA;AAAA,MACN,EAAA,EAAI,gBAAA,CAAiB,EAAE,KAAA,EAAO,GAAA,EAAK,IAAA,CAAK,EAAA,EAAI,IAAA,EAAM,CAAA,MAAA,EAAS,QAAQ,CAAA,IAAA,CAAA,EAAQ,CAAA;AAAA,MAC3E,GAAI,IAAA,CAAK,UAAA,KAAe,MAAA,GAAY,EAAE,UAAA,EAAY,gBAAA,CAAiB,IAAA,CAAK,UAAU,CAAA,EAAE,GAAI,EAAC;AAAA,MACzF,OAAA,EAAS,KAAA;AAAA,MACT,GAAI,KAAK,WAAA,KAAgB,MAAA,GAAY,EAAE,WAAA,EAAa,IAAA,CAAK,WAAA,EAAY,GAAI;AAAC,KAC5E;AAAA,EACF;AAEA,EAAA,MAAM,SAAS,eAAA,CAAgB,EAAE,KAAK,IAAA,CAAK,MAAA,EAAQ,MAAM,CAAA;AACzD,EAAA,IAAI,CAAC,YAAA,CAAa,GAAA,CAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACvC,IAAA,OAAO,IAAA,CAAK,CAAA,eAAA,EAAkB,MAAA,CAAO,SAAS,CAAA,qCAAA,CAAuC,CAAA;AAAA,EACvF;AAGA,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,QAAA,KAAa,OAAA,GAAU,KAAA,GAAQ,MAAA;AACvD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,MAAM,IAAA,CAAK,QAAA;AAAA,IACX,QAAQ,MAAA,CAAO,SAAA;AAAA,IACf,EAAA,EAAI,gBAAA,CAAiB,EAAE,KAAA,EAAO,UAAA,EAAY,GAAA,EAAK,IAAA,CAAK,EAAA,EAAI,IAAA,EAAM,CAAA,MAAA,EAAS,QAAQ,CAAA,IAAA,CAAA,EAAQ,CAAA;AAAA,IACvF,GAAI,KAAK,UAAA,KAAe,MAAA,GACpB,EAAE,UAAA,EAAY,gBAAA,CAAiB,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAK,IAAA,CAAK,UAAA,EAAY,MAAM,CAAA,MAAA,EAAS,QAAQ,gBAAgB,CAAA,KAC7G,EAAC;AAAA,IACL,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,GAAI,KAAK,WAAA,KAAgB,MAAA,GAAY,EAAE,WAAA,EAAa,IAAA,CAAK,WAAA,EAAY,GAAI;AAAC,GAC5E;AACF;AAEA,SAAS,eAAA,CAAgB,EAAE,GAAA,EAAK,IAAA,EAAK,EAA8E;AACjH,EAAA,IAAI,GAAA,KAAQ,MAAA,EAAW,OAAO,IAAA,CAAK,0BAA0B,CAAA;AAC7D,EAAA,IAAI,OAAO,GAAA,KAAQ,UAAA,EAAY,OAAO,GAAA;AACtC,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI;AACF,IAAA,QAAA,GAAW,GAAA,EAAI;AAAA,EACjB,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,IAAA;AAAA,MACL,uBAAuB,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA,6EAAA;AAAA,KAC/E;AAAA,EACF;AACA,EAAA,IAAI,CAAC,UAAA,CAAW,QAAQ,CAAA,EAAG,OAAO,KAAK,8DAA8D,CAAA;AACrG,EAAA,OAAO,QAAA;AACT;AAMA,SAAS,gBAAA,CAAiB,EAAE,KAAA,EAAO,GAAA,EAAK,MAAK,EAA2D;AACtG,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA;AAChC,EAAA,IAAI,MAAA,EAAQ,OAAO,MAAA,CAAO,aAAA,CAAc,GAAG,CAAA;AAC3C,EAAA,KAAA,MAAW,CAAC,cAAc,OAAO,CAAA,IAAK,OAAO,OAAA,CAAQ,KAAA,CAAM,OAAO,CAAA,EAAG;AACnE,IAAA,IAAI,OAAA,CAAQ,aAAA,CAAc,YAAY,CAAA,KAAM,KAAK,OAAO,GAAA;AAAA,EAC1D;AACA,EAAA,MAAM,QAAQ,MAAA,CAAO,IAAA,CAAK,MAAM,OAAO,CAAA,CAAE,KAAK,IAAI,CAAA;AAClD,EAAA,MAAM,IAAI,kBAAA;AAAA,IACR,CAAA,OAAA,EAAU,MAAM,SAAS,CAAA,GAAA,EAAM,IAAI,CAAA,4BAAA,EAA+B,GAAG,CAAA,kBAAA,EAAqB,KAAA,IAAS,MAAM,CAAA,CAAA,CAAA;AAAA,IACzG,KAAA,CAAM;AAAA,GACR;AACF;AAEA,SAAS,kBAAkB,MAAA,EAAuC;AAChE,EAAA,IAAI,OAAO,MAAA,KAAW,QAAA,EAAU,OAAO,MAAA;AACvC,EAAA,OAAO;AAAA,IACL,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,WAAW,MAAA,CAAO,QAAA,IAAY,EAAC,EAAG,GAAA,CAAI,CAAC,OAAA,MAAa;AAAA,MAClD,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,GAAI,QAAQ,KAAA,KAAU,IAAA,GAAO,EAAE,KAAA,EAAO,IAAA,KAAkB,EAAC;AAAA,MACzD,GAAI,QAAQ,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,EAAQ,OAAA,CAAQ,MAAA,EAAO,GAAI;AAAC,KACnE,CAAE;AAAA,GACJ;AACF;AAEA,SAAS,aAAa,KAAA,EAAyB;AAC7C,EAAA,OAAO,MAAM,IAAA,IAAQ,gBAAA;AACvB;AAEA,SAAS,gBAAgB,KAAA,EAA2B;AAClD,EAAA,OAAO,KAAA,CAAM,OACV,GAAA,CAAI,CAAC,UAAW,KAAA,CAAM,IAAA,CAAK,MAAA,GAAS,CAAA,GAAI,CAAA,EAAG,KAAA,CAAM,KAAK,IAAA,CAAK,GAAG,CAAC,CAAA,EAAA,EAAK,KAAA,CAAM,OAAO,KAAK,KAAA,CAAM,OAAQ,CAAA,CACpG,IAAA,CAAK,IAAI,CAAA;AACd;AClUO,IAAM,qBAAA,GAAwB;AAC9B,IAAM,UAAA,GAAa;AAkB1B,eAAsB,oBAAA,CACpB,GAAA,EACA,OAAA,GAAgC,EAAC,EACL;AAC5B,EAAA,MAAM,OAAO,MAAMI,iBAAA,CAAS,GAAG,CAAA,CAAE,MAAM,MAAM;AAC3C,IAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,+BAAA,EAAkC,GAAG,CAAA,CAAE,CAAA;AAAA,EACtE,CAAC,CAAA;AAED,EAAA,MAAM,UAAA,GAAaC,SAAA,CAAK,IAAA,EAAM,qBAAqB,CAAA;AACnD,EAAA,MAAM,aAAa,MAAMC,aAAA,CAAK,UAAU,CAAA,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AAC/D,EAAA,IAAI,CAAC,UAAA,EAAY,MAAA,EAAO,EAAG;AACzB,IAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,EAAG,qBAAqB,CAAA,cAAA,EAAiB,GAAG,CAAA,CAAE,CAAA;AAAA,EAC7E;AAEA,EAAA,MAAM,WAAA,GAAc,MAAM,eAAA,CAAgB,IAAI,CAAA;AAC9C,EAAA,MAAM,KAAA,GAAQ,CAAC,qBAAA,EAAuB,GAAG,WAAW,CAAA;AAEpD,EAAA,gBAAA,CAAiB,IAAI,CAAA;AAErB,EAAA,MAAMC,MAAA,GAAOC,eAAA,CAAW,2PAAY,EAAK;AAAA,IACvC,cAAA,EAAgB,IAAA;AAAA,IAChB,OAAA,EAAS,KAAA;AAAA,IACT,GAAI,OAAA,CAAQ,aAAA,KAAkB,MAAA,GAC1B,EAAE,KAAA,EAAO,EAAE,uBAAA,EAAyB,OAAA,CAAQ,aAAA,EAAc,EAAE,GAC5D;AAAC,GACN,CAAA;AAED,EAAA,MAAM,UAAU,qBAAA,EAAsB;AACtC,EAAA,IAAI;AACF,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,OAAA,CAAQ,WAAA,GAAc,IAAA;AACtB,MAAA,IAAI;AACF,QAAA,MAAMD,MAAA,CAAK,MAAA,CAAOF,SAAA,CAAK,IAAA,EAAM,IAAI,CAAC,CAAA;AAAA,MACpC,SAAS,KAAA,EAAO;AAGd,QAAA,IAAI,KAAA,YAAiB,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,sBAAsB,MAAM,KAAA;AACzE,QAAA,MAAM,IAAI,kBAAA;AAAA,UACR,mBAAmB,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA;AAAA,UACzE;AAAA,SACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA,SAAE;AACA,IAAA,OAAA,CAAQ,WAAA,GAAc,MAAA;AACtB,IAAA,mBAAA,CAAoB,OAAO,CAAA;AAAA,EAC7B;AAEA,EAAA,MAAM,UAA0E,EAAC;AACjF,EAAA,KAAA,MAAW,KAAA,IAAS,QAAQ,OAAA,EAAS;AACnC,IAAA,IAAI,oBAAA,CAAqB,KAAA,CAAM,KAAK,CAAA,EAAG,OAAA,CAAQ,IAAA,CAAK,EAAE,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,IAAA,EAAM,KAAA,CAAM,MAAM,CAAA;AAAA,EAC9F;AACA,EAAA,MAAM,WAAA,GAAc,QAAQ,CAAC,CAAA;AAC7B,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,wGAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACA,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,CAAC,KAAA,KAAU,MAAM,IAAA,IAAQ,gBAAgB,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAC9E,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,uBAAA,EAA0B,OAAA,CAAQ,MAAM,CAAA,QAAA,EAAW,KAAK,CAAA,6CAAA;AAAA,KAC1D;AAAA,EACF;AAEA,EAAA,MAAM,SAAqB,EAAC;AAC5B,EAAA,KAAA,MAAW,KAAA,IAAS,QAAQ,MAAA,EAAQ;AAClC,IAAA,IAAI,WAAW,KAAA,CAAM,KAAK,GAAG,MAAA,CAAO,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,EACtD;AACA,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,+BAA0B,UAAU,CAAA,uDAAA;AAAA,KACtC;AAAA,EACF;AAEA,EAAA,MAAM,QAAmB,EAAC;AAC1B,EAAA,KAAA,MAAW,KAAA,IAAS,QAAQ,KAAA,EAAO;AACjC,IAAA,IAAI,UAAU,KAAA,CAAM,KAAK,GAAG,KAAA,CAAM,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,EACpD;AAEA,EAAA,MAAM,SAAA,GAAY,mBAAmB,EAAE,MAAA,EAAQ,YAAY,KAAA,EAAO,MAAA,EAAQ,OAAO,CAAA;AACjF,EAAA,OAAO,EAAE,SAAA,EAAW,IAAA,EAAM,oBAAA,CAAqB,SAAS,GAAG,KAAA,EAAM;AACnE;AAEA,eAAe,gBAAgB,IAAA,EAAiC;AAC9D,EAAA,MAAM,SAAA,GAAYA,SAAA,CAAK,IAAA,EAAM,UAAU,CAAA;AACvC,EAAA,MAAM,OAAA,GAAU,MAAMI,gBAAA,CAAQ,SAAA,EAAW,EAAE,aAAA,EAAe,IAAA,EAAM,CAAA,CAAE,KAAA,CAAM,MAAM,EAAE,CAAA;AAChF,EAAA,OAAO,OAAA,CACJ,MAAA;AAAA,IACC,CAAC,UACC,KAAA,CAAM,MAAA,MAAY,KAAA,CAAM,IAAA,CAAK,SAAS,KAAK,CAAA,IAAK,CAAC,KAAA,CAAM,IAAA,CAAK,SAAS,OAAO,CAAA,IAAK,CAAC,KAAA,CAAM,IAAA,CAAK,WAAW,GAAG;AAAA,GAC/G,CACC,GAAA,CAAI,CAAC,KAAA,KAAUJ,SAAA,CAAK,YAAY,KAAA,CAAM,IAAI,CAAC,CAAA,CAC3C,IAAA,EAAK;AACV;AAGA,SAAS,iBAAiB,IAAA,EAAoB;AAC5C,EAAA,MAAMK,QAAAA,GAAUC,sBAAA,CAAc,2PAAe,CAAA;AAC7C,EAAA,MAAM,MAAA,GAAS,KAAK,QAAA,CAASC,QAAG,IAAI,IAAA,GAAO,CAAA,EAAG,IAAI,CAAA,EAAGA,QAAG,CAAA,CAAA;AACxD,EAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAKF,QAAAA,CAAQ,KAAK,CAAA,EAAG;AAC5C,IAAA,IAAI,IAAI,UAAA,CAAW,MAAM,GAAG,OAAOA,QAAAA,CAAQ,MAAM,GAAG,CAAA;AAAA,EACtD;AACF;;;AChJA,IAAM,UAAA,GAAmD;AAAA,EACvD,IAAA,EAAM,QAAA;AAAA,EACN,IAAA,EAAM,QAAA;AAAA,EACN,OAAA,EAAS,QAAA;AAAA,EACT,MAAA,EAAQ,QAAA;AAAA,EACR,OAAA,EAAS,QAAA;AAAA,EACT,MAAA,EAAQ,QAAA;AAAA,EACR,OAAA,EAAS,SAAA;AAAA,EACT,WAAA,EAAa,QAAA;AAAA,EACb,IAAA,EAAM,QAAA;AAAA,EACN,KAAA,EAAO;AACT,CAAA;AAUO,SAAS,uBAAuB,UAAA,EAAyC;AAC9E,EAAA,MAAM,KAAA,GAAkB;AAAA,IACtB,CAAA,mDAAA,EAAsD,WAAW,SAAS,CAAA,iCAAA,CAAA;AAAA,IAC1E,EAAA;AAAA,IACA,CAAA,YAAA,EAAe,kBAAA,CAAmB,UAAA,CAAW,SAAS,CAAC,CAAA,IAAA;AAAA,GACzD;AACA,EAAA,KAAA,MAAW,KAAA,IAAS,WAAW,MAAA,EAAQ;AACrC,IAAA,IAAI,MAAM,MAAA,EAAQ;AAIhB,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,kBAAA,EAAqB,KAAA,CAAM,MAAM,CAAA,2CAAA,CAAwC,CAAA;AACpF,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,KAAA,CAAM,KAAK,CAAA,yBAAA,CAA2B,CAAA;AACtD,MAAA;AAAA,IACF;AACA,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,KAAA,CAAM,KAAK,CAAA,GAAA,CAAK,CAAA;AAChC,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,MAAM,CAAA,IAAK,MAAA,CAAO,QAAQ,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA,EAAG;AAGhE,MAAA,IAAI,OAAO,UAAA,EAAY;AACvB,MAAA,KAAA,CAAM,KAAK,CAAA,IAAA,EAAO,IAAI,KAAK,cAAA,CAAe,MAAM,CAAC,CAAA,CAAE,CAAA;AAAA,IACrD;AACA,IAAA,KAAA,CAAM,KAAK,KAAK,CAAA;AAAA,EAClB;AACA,EAAA,KAAA,CAAM,IAAA,CAAK,KAAK,EAAE,CAAA;AAClB,EAAA,KAAA,CAAM,IAAA,CAAK,GAAG,eAAA,CAAgB,UAAU,CAAC,CAAA;AACzC,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AASA,SAAS,gBAAgB,UAAA,EAA2C;AAClE,EAAA,MAAM,OAAA,GAAU,UAAA,CAAW,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,KAAU,MAAA,CAAO,OAAA,CAAQ,KAAA,CAAM,OAAA,IAAW,EAAE,CAAC,CAAA;AACxF,EAAA,MAAM,QAAQ,CAAC,CAAA,YAAA,EAAe,qBAAqB,UAAA,CAAW,SAAS,CAAC,CAAA,IAAA,CAAM,CAAA;AAC9E,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,MAAM,CAAA,IAAK,OAAA,CAAQ,KAAK,CAAC,CAAC,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA,KAAM,EAAE,aAAA,CAAc,CAAC,CAAC,CAAA,EAAG;AAC3E,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,IAAI,CAAA,YAAA,EAAe,gBAAA,CAAiB,MAAM,CAAC,CAAA,UAAA,EAAa,gBAAA,CAAiB,MAAM,CAAC,CAAA,EAAA,CAAI,CAAA;AAAA,EACtG;AACA,EAAA,KAAA,CAAM,IAAA,CAAK,KAAK,EAAE,CAAA;AAClB,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,iBAAiB,MAAA,EAAkC;AAC1D,EAAA,MAAM,UAAU,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,MAAA,IAAU,EAAE,CAAA;AAClD,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,sBAAA;AACjC,EAAA,MAAM,SAAS,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,KAAK,CAAA,KAAM;AAC5C,IAAA,MAAM,IAAA,GAAO,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA;AAClC,IAAA,OAAO,KAAA,CAAM,QAAA,GAAW,CAAA,EAAG,IAAI,CAAA,GAAA,EAAM,IAAI,CAAA,OAAA,CAAA,GAAY,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA;AAAA,EACvE,CAAC,CAAA;AACD,EAAA,OAAO,CAAA,EAAA,EAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,CAAA;AAC/B;AAEA,SAAS,iBAAiB,MAAA,EAAkC;AAC1D,EAAA,IAAI,CAAC,MAAA,CAAO,OAAA,EAAS,OAAO,0BAAA;AAG5B,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,OAAO,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,IAAI,CAAA,KAAM;AACnE,IAAA,MAAM,IAAA,GAAO,WAAW,IAAI,CAAA;AAC5B,IAAA,OAAO,IAAA,KAAS,SAAA,GAAY,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA,GAAK,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,IAAI,CAAA,OAAA,CAAA;AAAA,EACnE,CAAC,CAAA;AACD,EAAA,OAAO,CAAA,gBAAA,EAAmB,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,KAAA,CAAA;AAC9C;AAEO,SAAS,mBAAmB,SAAA,EAA2B;AAC5D,EAAA,OAAO,CAAA,EAAG,UAAA,CAAW,SAAS,CAAC,CAAA,MAAA,CAAA;AACjC;AAEO,SAAS,qBAAqB,SAAA,EAA2B;AAC9D,EAAA,OAAO,CAAA,EAAG,UAAA,CAAW,SAAS,CAAC,CAAA,OAAA,CAAA;AACjC;AAEA,SAAS,WAAW,SAAA,EAA2B;AAC7C,EAAA,OAAO,UACJ,KAAA,CAAM,GAAG,EACT,GAAA,CAAI,CAAC,SAAS,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,KAAgB,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CAC1D,KAAK,EAAE,CAAA;AACZ;AAEA,SAAS,eAAe,MAAA,EAAkC;AACxD,EAAA,MAAM,IAAA,GAAO,UAAA,CAAW,MAAA,CAAO,IAAI,CAAA;AACnC,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,WAAA,KAAgB,IAAA,IAAQ,OAAO,QAAA,KAAa,KAAA;AACnE,EAAA,OAAO,OAAA,IAAW,IAAA,KAAS,SAAA,GAAY,IAAA,GAAO,GAAG,IAAI,CAAA,OAAA,CAAA;AACvD;;;ACtHO,IAAM,cAAc,CAAC,GAAA,EAAK,MAAM,GAAA,EAAK,IAAA,EAAM,KAAK,IAAI;AAoBpD,SAAS,aAAA,CAAc,WAAsB,KAAA,EAAwC;AAC1F,EAAA,KAAA,CAAM,SAAS,CAAA;AACf,EAAA,IAAI,SAAA,CAAU,IAAA,KAAS,KAAA,IAAS,SAAA,CAAU,SAAS,IAAA,EAAM;AACvD,IAAA,KAAA,MAAW,OAAA,IAAW,SAAA,CAAU,QAAA,EAAU,aAAA,CAAc,SAAS,KAAK,CAAA;AAAA,EACxE;AACA,EAAA,IAAI,UAAU,IAAA,KAAS,KAAA,EAAO,aAAA,CAAc,SAAA,CAAU,SAAS,KAAK,CAAA;AACtE;AAEO,SAAS,kBAAkB,SAAA,EAAiC;AACjE,EAAA,MAAM,WAAsB,EAAC;AAC7B,EAAA,aAAA,CAAc,SAAA,EAAW,CAAC,IAAA,KAAS;AACjC,IAAA,IAAI,IAAA,CAAK,SAAS,SAAA,EAAW,QAAA,CAAS,KAAK,IAAA,CAAK,IAAA,EAAM,KAAK,KAAK,CAAA;AAAA,EAClE,CAAC,CAAA;AACD,EAAA,OAAO,QAAA;AACT;AAEO,SAAS,kBAAkB,SAAA,EAAgC;AAChE,EAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,SAAS,CAAA,CAAE,OAAA;AAAA,IAAQ,CAAC,YAClD,OAAA,CAAQ,IAAA,KAAS,WAAW,CAAC,OAAA,CAAQ,IAAI,CAAA,GAAI;AAAC,GAChD;AACA,EAAA,OAAO,CAAC,GAAG,IAAI,GAAA,CAAI,KAAK,CAAC,CAAA;AAC3B;AAEO,SAAS,uBAAuB,SAAA,EAAgC;AACrE,EAAA,MAAM,OAAiB,EAAC;AACxB,EAAA,aAAA,CAAc,SAAA,EAAW,CAAC,IAAA,KAAS;AACjC,IAAA,IAAI,KAAK,IAAA,KAAS,YAAA,EAAc,IAAA,CAAK,IAAA,CAAK,KAAK,GAAG,CAAA;AAAA,EACpD,CAAC,CAAA;AACD,EAAA,OAAO,CAAC,GAAG,IAAI,GAAA,CAAI,IAAI,CAAC,CAAA;AAC1B;ACzCO,IAAM,gBAAA,GAAmBV,MAC7B,MAAA,EAAO,CACP,IAAI,qBAAqB,CAAA,CACzB,KAAA,CAAM,kBAAA,EAAoB,8CAA8C;AAEpE,IAAM,kBAAkBA,KAAAA,CAC5B,MAAA,EAAO,CACP,KAAA,CAAM,mBAAmB,sEAAsE;AAG3F,IAAM,oBAAA,GAAuBA,KAAAA,CACjC,MAAA,EAAO,CACP,MAAA;AAAA,EACC,CAAC,UAAU,kBAAA,CAAmB,IAAA,CAAK,KAAK,CAAA,IAAK,uBAAA,CAAwB,KAAK,KAAK,CAAA;AAAA,EAC/E;AACF;AAEK,IAAM,oBAAA,GAAuB,CAAC,SAAA,KAA+B,SAAA,CAAU,SAAS,GAAG;;;ACtBnF,IAAMa,aAAAA,GAAe;AAAA,EAC1B,MAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF;AAIO,IAAMC,iBAAAA,GAAmBd,KAAAA,CAAE,IAAA,CAAKa,aAAY;AAEnD,IAAM,iBAAA,GAAqE;AAAA,EACzE,mBAAA,EAAqB,CAAC,MAAM,CAAA;AAAA,EAC5B,OAAA,EAAS,CAAC,aAAA,EAAe,MAAM;AACjC,CAAA;AAEA,IAAM,YAAA,GAAe,+BAAA;AAQd,IAAM,iBAAA,GAAoB,CAAC,KAAA,EAAsB,IAAA,KACtD,OAAO,KAAA,KAAU,QAAA,KAAa,iBAAA,CAAkB,KAAK,CAAA,EAAG,QAAA,CAAS,IAAI,CAAA,IAAK,KAAA;AAgB5E,SAAS,YAAA,CAAa,OAAsB,IAAA,EAAiC;AAC3E,EAAA,IAAI,OAAO,UAAU,SAAA,EAAW,OAAO,SAAS,SAAA,GAAY,IAAA,GAAO,wCAAwC,IAAI,CAAA,CAAA,CAAA;AAC/G,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,IAAI,CAAC,CAAC,SAAA,EAAW,QAAA,EAAU,WAAW,QAAQ,CAAA,CAAE,QAAA,CAAS,IAAI,CAAA,EAAG;AAC9D,MAAA,OAAO,wCAAwC,IAAI,CAAA,CAAA,CAAA;AAAA,IACrD;AACA,IAAA,IAAI,CAAC,SAAA,EAAW,QAAQ,CAAA,CAAE,QAAA,CAAS,IAAI,CAAA,EAAG;AACxC,MAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,EAAG,OAAO,qBAAqB,IAAI,CAAA,oBAAA,CAAA;AAC9D,MAAA,IAAI,CAAC,MAAA,CAAO,aAAA,CAAc,KAAK,CAAA,EAAG;AAChC,QAAA,OAAO,qBAAqB,IAAI,CAAA,6EAAA,CAAA;AAAA,MAClC;AAAA,IACF;AAIA,IAAA,IAAI,SAAS,SAAA,IAAa,IAAA,CAAK,IAAI,KAAK,CAAA,GAAI,OAAO,gBAAA,EAAkB;AACnE,MAAA,OAAO,4HAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,MAAM,YAAA,GAAe,kBAAkB,KAAK,CAAA;AAC5C,EAAA,IAAI,YAAA,EAAc,OAAO,YAAA,CAAa,QAAA,CAAS,IAAI,IAAI,IAAA,GAAO,CAAA,SAAA,EAAY,KAAK,CAAA,uBAAA,EAA0B,IAAI,CAAA,CAAA,CAAA;AAK7G,EAAA,OAAO,IAAA;AACT;AAEO,IAAM,YAAA,GAAeb,MACzB,YAAA,CAAa;AAAA,EACZ,IAAA,EAAMc,iBAAAA;AAAA,EACN,WAAA,EAAad,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAClC,QAAA,EAAUA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC/B,MAAA,EAAQA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC7B,OAAA,EAASA,KAAAA,CAAE,KAAA,CAAM,CAACA,MAAE,MAAA,EAAO,EAAGA,KAAAA,CAAE,MAAA,IAAUA,KAAAA,CAAE,OAAA,EAAS,CAAC,EAAE,QAAA,EAAS;AAAA,EACjE,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,YAAA,EAAc,iBAAiB,QAAA,EAAS;AAAA,EACxC,IAAA,EAAMA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC1B,UAAA,EAAYA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AAC1B,CAAC,CAAA,CACA,WAAA,CAAY,CAAC,MAAA,EAAQ,GAAA,KAAQ;AAC5B,EAAA,IAAI,MAAA,CAAO,YAAY,MAAA,EAAW;AAChC,IAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,MAAA,CAAO,OAAA,EAAS,OAAO,IAAI,CAAA;AACtD,IAAA,IAAI,KAAA,EAAO,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,KAAA,EAAO,IAAA,EAAM,CAAC,SAAS,CAAA,EAAG,CAAA;AAAA,EAC/E;AACA,EAAA,IAAI,MAAA,CAAO,WAAA,IAAe,MAAA,CAAO,QAAA,EAAU;AACzC,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,2CAA2C,IAAA,EAAM,CAAC,UAAU,CAAA,EAAG,CAAA;AAAA,EACzG;AACA,EAAA,IAAI,MAAA,CAAO,WAAA,IAAe,MAAA,CAAO,UAAA,EAAY;AAC3C,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,6CAA6C,IAAA,EAAM,CAAC,YAAY,CAAA,EAAG,CAAA;AAAA,EAC7G;AACA,EAAA,IAAI,OAAO,IAAA,IAAQ,CAAC,aAAa,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA,EAAG;AAClD,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,+CAA+C,IAAA,EAAM,CAAC,MAAM,CAAA,EAAG,CAAA;AAAA,EACzG;AACF,CAAC;AAEI,SAAS,UAAU,IAAA,EAAuD;AAC/E,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AACpC,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,OAAO,EAAE,QAAQ,KAAA,CAAM,CAAC,GAAa,IAAA,EAAM,KAAA,CAAM,CAAC,CAAA,EAAY;AAChE;;;ACrGA,IAAM,QAAA,mBAAW,IAAI,GAAA,CAAI,CAAC,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,OAAA,EAAS,MAAA,EAAQ,OAAA,EAAS,YAAY,CAAC,CAAA;AAC7F,IAAM,gBAAA,GAAmB,sBAAA;AACzB,IAAM,gBAAA,GAAmB,QAAA;AACzB,IAAM,eAAA,GAAkB,aAAA;AACxB,IAAM,cAAA,GAAiB,gBAAA;AAEvB,SAAS,SAAS,MAAA,EAAyB;AACzC,EAAA,MAAM,SAAkB,EAAC;AACzB,EAAA,IAAI,QAAA,GAAW,CAAA;AAEf,EAAA,OAAO,QAAA,GAAW,OAAO,MAAA,EAAQ;AAC/B,IAAA,MAAM,IAAA,GAAO,OAAO,QAAQ,CAAA;AAE5B,IAAA,IAAI,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,EAAG;AACnB,MAAA,QAAA,IAAY,CAAA;AACZ,MAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,UAAU,KAAA,EAAO,IAAA,EAAM,UAAU,CAAA;AACrD,MAAA,QAAA,IAAY,CAAA;AACZ,MAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,UAAU,KAAA,EAAO,IAAA,EAAM,UAAU,CAAA;AACrD,MAAA,QAAA,IAAY,CAAA;AACZ,MAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,SAAS,KAAA,EAAO,IAAA,EAAM,UAAU,CAAA;AACpD,MAAA,QAAA,IAAY,CAAA;AACZ,MAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,MAAM,EAAE,KAAA,EAAO,GAAA,EAAI,GAAI,UAAA,CAAW,QAAQ,QAAQ,CAAA;AAClD,MAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,UAAU,CAAA;AAC/C,MAAA,QAAA,GAAW,GAAA;AACX,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,WAAW,gBAAA,CAAiB,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,QAAQ,CAAC,CAAA;AAC7D,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAM,QAAQ,QAAA,CAAS,CAAC,MAAM,IAAA,GAAO,IAAA,GAAO,SAAS,CAAC,CAAA;AACtD,MAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,UAAA,EAAY,KAAA,EAAO,UAAU,CAAA;AACjD,MAAA,QAAA,IAAY,QAAA,CAAS,CAAC,CAAA,CAAE,MAAA;AACxB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,SAAS,cAAA,CAAe,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,QAAQ,CAAC,CAAA;AACzD,IAAA,IAAI,MAAA,IAAU,CAAC,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAA,EAAG;AAC1C,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,OAAO,MAAA,CAAO,CAAC,CAAA,EAAG,QAAA,EAAU,CAAA;AAC1D,MAAA,QAAA,IAAY,MAAA,CAAO,CAAC,CAAA,CAAE,MAAA;AACtB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAA,EAAG;AAC/B,MAAA,IAAI,GAAA,GAAM,QAAA;AACV,MAAA,OAAO,GAAA,GAAM,OAAO,MAAA,IAAU,eAAA,CAAgB,KAAK,MAAA,CAAO,GAAG,CAAW,CAAA,EAAG,GAAA,IAAO,CAAA;AAClF,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,YAAA,EAAc,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,QAAA,EAAU,GAAG,CAAA,EAAG,QAAA,EAAU,CAAA;AAChF,MAAA,QAAA,GAAW,GAAA;AACX,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,IAAI,mBAAA,CAAoB,CAAA,sBAAA,EAAyB,IAAI,KAAK,QAAQ,CAAA;AAAA,EAC1E;AAEA,EAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,EAAO,OAAO,EAAA,EAAI,QAAA,EAAU,MAAA,CAAO,MAAA,EAAQ,CAAA;AAC/D,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,UAAA,CAAW,QAAgB,KAAA,EAA+C;AACjF,EAAA,IAAI,KAAA,GAAQ,EAAA;AACZ,EAAA,IAAI,WAAW,KAAA,GAAQ,CAAA;AACvB,EAAA,OAAO,QAAA,GAAW,OAAO,MAAA,EAAQ;AAC/B,IAAA,MAAM,IAAA,GAAO,OAAO,QAAQ,CAAA;AAC5B,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,KAAA,IAAS,IAAA;AACT,MAAA,QAAA,IAAY,CAAA;AACZ,MAAA;AAAA,IACF;AACA,IAAA,IAAI,MAAA,CAAO,QAAA,GAAW,CAAC,CAAA,KAAM,GAAA,EAAK;AAChC,MAAA,KAAA,IAAS,GAAA;AACT,MAAA,QAAA,IAAY,CAAA;AACZ,MAAA;AAAA,IACF;AACA,IAAA,OAAO,EAAE,KAAA,EAAO,GAAA,EAAK,QAAA,GAAW,CAAA,EAAE;AAAA,EACpC;AACA,EAAA,MAAM,IAAI,mBAAA,CAAoB,6BAAA,EAA+B,KAAK,CAAA;AACpE;AAEA,IAAM,SAAN,MAAa;AAAA,EAGX,YAA6B,MAAA,EAAiB;AAAjB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAAkB;AAAA,EAFvC,KAAA,GAAQ,CAAA;AAAA,EAIhB,KAAA,GAAmB;AACjB,IAAA,MAAM,SAAA,GAAY,KAAK,OAAA,EAAQ;AAC/B,IAAA,IAAA,CAAK,MAAA,CAAO,OAAO,mBAAmB,CAAA;AACtC,IAAA,OAAO,SAAA;AAAA,EACT;AAAA,EAEQ,OAAA,GAAqB;AAC3B,IAAA,MAAM,QAAA,GAAW,CAAC,IAAA,CAAK,QAAA,EAAU,CAAA;AACjC,IAAA,OAAO,IAAA,CAAK,aAAa,IAAI,CAAA,WAAY,IAAA,CAAK,IAAA,CAAK,UAAU,CAAA;AAC7D,IAAA,OAAO,QAAA,CAAS,WAAW,CAAA,GAAK,QAAA,CAAS,CAAC,CAAA,GAAkB,EAAE,IAAA,EAAM,IAAA,EAAM,QAAA,EAAS;AAAA,EACrF;AAAA,EAEQ,QAAA,GAAsB;AAC5B,IAAA,MAAM,QAAA,GAAW,CAAC,IAAA,CAAK,QAAA,EAAU,CAAA;AACjC,IAAA,OAAO,IAAA,CAAK,aAAa,KAAK,CAAA,WAAY,IAAA,CAAK,IAAA,CAAK,UAAU,CAAA;AAC9D,IAAA,OAAO,QAAA,CAAS,WAAW,CAAA,GAAK,QAAA,CAAS,CAAC,CAAA,GAAkB,EAAE,IAAA,EAAM,KAAA,EAAO,QAAA,EAAS;AAAA,EACtF;AAAA,EAEQ,QAAA,GAAsB;AAC5B,IAAA,IAAI,IAAA,CAAK,YAAA,CAAa,KAAK,CAAA,EAAG,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,OAAA,EAAS,IAAA,CAAK,QAAA,EAAS,EAAE;AAC7E,IAAA,OAAO,KAAK,YAAA,EAAa;AAAA,EAC3B;AAAA,EAEQ,YAAA,GAA0B;AAChC,IAAA,IAAI,IAAA,CAAK,IAAA,EAAK,CAAE,IAAA,KAAS,QAAA,EAAU;AACjC,MAAA,IAAA,CAAK,OAAA,EAAQ;AACb,MAAA,MAAM,KAAA,GAAQ,KAAK,OAAA,EAAQ;AAC3B,MAAA,IAAA,CAAK,MAAA,CAAO,UAAU,KAAK,CAAA;AAC3B,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,IAAI,IAAA,CAAK,WAAA,CAAY,YAAY,CAAA,EAAG;AAClC,MAAA,MAAM,UAAA,GAAa,KAAK,eAAA,EAAgB;AACxC,MAAA,MAAM,IAAA,GAAO,KAAK,IAAA,EAAK;AACvB,MAAA,IAAI,IAAA,CAAK,SAAS,UAAA,EAAY;AAC5B,QAAA,MAAM,IAAI,mBAAA,CAAoB,kEAAA,EAAoE,IAAA,CAAK,QAAQ,CAAA;AAAA,MACjH;AACA,MAAA,OAAO,UAAA;AAAA,IACT;AACA,IAAA,OAAO,KAAK,eAAA,EAAgB;AAAA,EAC9B;AAAA,EAEQ,eAAA,GAA6B;AACnC,IAAA,IAAA,CAAK,OAAA,EAAQ;AACb,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,iBAAA,CAAkB,YAAY,CAAA;AAC/C,IAAA,IAAI,CAAC,sBAAA,CAAuB,IAAA,CAAK,GAAG,CAAA,EAAG;AACrC,MAAA,MAAM,IAAI,oBAAoB,CAAA,wBAAA,EAA2B,GAAG,KAAK,IAAA,CAAK,IAAA,GAAO,QAAQ,CAAA;AAAA,IACvF;AACA,IAAA,OAAO,EAAE,IAAA,EAAM,YAAA,EAAc,GAAA,EAAI;AAAA,EACnC;AAAA,EAEQ,eAAA,GAA6B;AACnC,IAAA,MAAM,IAAA,GAAO,KAAK,YAAA,EAAa;AAC/B,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,UAAA,EAAY,uBAAuB,CAAA;AAChE,IAAA,IAAI,CAAC,WAAA,CAAY,QAAA,CAAS,QAAA,CAAS,KAAkB,CAAA,EAAG;AACtD,MAAA,MAAM,IAAI,mBAAA,CAAoB,CAAA,sBAAA,EAAyB,SAAS,KAAK,CAAA,CAAA,CAAA,EAAK,SAAS,QAAQ,CAAA;AAAA,IAC7F;AACA,IAAA,MAAM,KAAA,GAAQ,KAAK,YAAA,EAAa;AAChC,IAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,IAAI,QAAA,CAAS,KAAA,EAAoB,MAAM,KAAA,EAAM;AAAA,EACzE;AAAA,EAEQ,YAAA,GAAwB;AAC9B,IAAA,MAAM,KAAA,GAAQ,KAAK,IAAA,EAAK;AAExB,IAAA,IAAI,KAAA,CAAM,SAAS,QAAA,EAAU;AAC3B,MAAA,IAAA,CAAK,OAAA,EAAQ;AACb,MAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA,EAAO,MAAM,KAAA,EAAM;AAAA,IAC/C;AACA,IAAA,IAAI,KAAA,CAAM,SAAS,QAAA,EAAU;AAC3B,MAAA,IAAA,CAAK,OAAA,EAAQ;AACb,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA;AAGhC,MAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,IAAM,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,IAAK,CAAC,MAAA,CAAO,aAAA,CAAc,KAAK,CAAA,EAAI;AACxF,QAAA,MAAM,IAAI,mBAAA;AAAA,UACR,CAAA,iBAAA,EAAoB,MAAM,KAAK,CAAA,4DAAA,CAAA;AAAA,UAC/B,KAAA,CAAM;AAAA,SACR;AAAA,MACF;AACA,MAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA,EAAM;AAAA,IAClC;AACA,IAAA,IAAI,KAAA,CAAM,SAAS,YAAA,EAAc;AAC/B,MAAA,MAAM,IAAI,oBAAoB,CAAA,0BAAA,EAA6B,KAAA,CAAM,SAAS,KAAK,CAAA,CAAA,CAAA,EAAK,MAAM,QAAQ,CAAA;AAAA,IACpG;AAEA,IAAA,IAAA,CAAK,OAAA,EAAQ;AACb,IAAA,IAAI,KAAA,CAAM,KAAA,KAAU,MAAA,IAAU,KAAA,CAAM,UAAU,OAAA,EAAS;AACrD,MAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA,EAAO,KAAA,CAAM,UAAU,MAAA,EAAO;AAAA,IAC1D;AACA,IAAA,IAAI,KAAA,CAAM,UAAU,MAAA,EAAQ,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,OAAO,IAAA,EAAK;AAClE,IAAA,IAAI,KAAA,CAAM,UAAU,OAAA,EAAS;AAC3B,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,iBAAA,CAAkB,OAAO,CAAA;AAC1C,MAAA,IAAI,CAAC,iBAAA,CAAkB,IAAA,CAAK,GAAG,CAAA,EAAG;AAChC,QAAA,MAAM,IAAI,mBAAA,CAAoB,CAAA,mBAAA,EAAsB,GAAG,CAAA,CAAA,CAAA,EAAK,MAAM,QAAQ,CAAA;AAAA,MAC5E;AACA,MAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,GAAA,EAAI;AAAA,IAC9B;AACA,IAAA,IAAI,KAAA,CAAM,UAAU,YAAA,EAAc;AAChC,MAAA,MAAM,IAAI,mBAAA,CAAoB,kEAAA,EAAoE,KAAA,CAAM,QAAQ,CAAA;AAAA,IAClH;AACA,IAAA,IAAI,QAAA,CAAS,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA,IAAK,CAAC,kBAAA,CAAmB,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,EAAG;AACtE,MAAA,MAAM,IAAI,mBAAA,CAAoB,CAAA,0BAAA,EAA6B,MAAM,KAAK,CAAA,CAAA,CAAA,EAAK,MAAM,QAAQ,CAAA;AAAA,IAC3F;AACA,IAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,MAAM,KAAA,EAAM;AAAA,EAC7C;AAAA,EAEQ,kBAAkB,EAAA,EAAoC;AAC5D,IAAA,IAAA,CAAK,MAAA,CAAO,QAAA,EAAU,CAAA,UAAA,EAAa,EAAE,CAAA,CAAE,CAAA;AACvC,IAAA,MAAM,WAAW,IAAA,CAAK,MAAA,CAAO,QAAA,EAAU,CAAA,gBAAA,EAAmB,EAAE,CAAA,KAAA,CAAO,CAAA;AACnE,IAAA,IAAA,CAAK,MAAA,CAAO,QAAA,EAAU,CAAA,UAAA,EAAa,EAAE,CAAA,IAAA,CAAM,CAAA;AAC3C,IAAA,OAAO,QAAA,CAAS,KAAA;AAAA,EAClB;AAAA,EAEQ,IAAA,GAAc;AACpB,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AAAA,EAC/B;AAAA,EAEQ,YAAY,OAAA,EAA0B;AAC5C,IAAA,MAAM,KAAA,GAAQ,KAAK,IAAA,EAAK;AACxB,IAAA,OAAO,KAAA,CAAM,IAAA,KAAS,YAAA,IAAgB,KAAA,CAAM,KAAA,KAAU,OAAA;AAAA,EACxD;AAAA,EAEQ,aAAa,OAAA,EAA0B;AAC7C,IAAA,IAAI,CAAC,IAAA,CAAK,WAAA,CAAY,OAAO,GAAG,OAAO,KAAA;AACvC,IAAA,IAAA,CAAK,OAAA,EAAQ;AACb,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,OAAA,GAAiB;AACvB,IAAA,MAAM,KAAA,GAAQ,KAAK,IAAA,EAAK;AACxB,IAAA,IAAI,KAAA,CAAM,IAAA,KAAS,KAAA,EAAO,IAAA,CAAK,KAAA,IAAS,CAAA;AACxC,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEQ,MAAA,CAAO,MAAiB,WAAA,EAA4B;AAC1D,IAAA,MAAM,KAAA,GAAQ,KAAK,IAAA,EAAK;AACxB,IAAA,IAAI,KAAA,CAAM,SAAS,IAAA,EAAM;AACvB,MAAA,MAAM,IAAI,mBAAA,CAAoB,CAAA,SAAA,EAAY,WAAW,CAAA,OAAA,EAAU,MAAM,KAAA,IAAS,KAAK,CAAA,CAAA,CAAA,EAAK,KAAA,CAAM,QAAQ,CAAA;AAAA,IACxG;AACA,IAAA,OAAO,KAAK,OAAA,EAAQ;AAAA,EACtB;AACF,CAAA;AAEO,SAAS,eAAe,MAAA,EAAiC;AAC9D,EAAA,MAAM,OAAA,GAAU,OAAO,IAAA,EAAK;AAC5B,EAAA,IAAI,QAAQ,MAAA,KAAW,CAAA,QAAS,IAAI,mBAAA,CAAoB,mBAAmB,CAAC,CAAA;AAC5E,EAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAS,GAAA,EAAK,IAAI,MAAA,CAAO,QAAA,CAAS,OAAO,CAAC,CAAA,CAAE,KAAA,EAAM,EAAE;AACvE;;;ACxPO,IAAM,wBAAwBA,KAAAA,CAClC,MAAA,GACA,SAAA,CAAU,CAAC,QAAQ,GAAA,KAAyB;AAC3C,EAAA,IAAI;AACF,IAAA,OAAO,eAAe,MAAM,CAAA;AAAA,EAC9B,SAAS,KAAA,EAAO;AACd,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAA,EAAG,CAAA;AAChG,IAAA,OAAOA,KAAAA,CAAE,KAAA;AAAA,EACX;AACF,CAAC;;;ACPH,IAAM,qBAAA,GAAwB,+BAAA;AAK9B,IAAM,oBAAA,GAAuB,mBAAA;AAK7B,IAAM,iBAAA,GAAoB,gBAAA;AAM1B,IAAM,qBAAA,GAAwB,wBAAA;AAG9B,IAAM,yBAAA,GAA4B,qCAAA;AAGlC,IAAM,uBAAA,GAA0B,6BAAA;AAChC,IAAM,oBAAA,GAAuB,qDAAA;AAC7B,IAAM,mBAAA,GAAsB,2BAAA;AAC5B,IAAM,qBAAA,GAAwB,iBAAA;AAC9B,IAAM,mBAAA,GAAsB,SAAA;AAErB,IAAM,iBAAA,GAAoBA,MAAE,YAAA,CAAa;AAAA,EAC9C,IAAA,EAAMc,iBAAAA;AAAA,EACN,QAAA,EAAUd,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC/B,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAC1B,CAAC;AAQD,IAAM,uBAAuBA,KAAAA,CAC1B,MAAA,GACA,SAAA,CAAU,CAAC,QAAQ,GAAA,KAAwB;AAC1C,EAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AACrD,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,GAAA,CAAI,SAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,oEAAoE,CAAA;AAC5G,IAAA,OAAOA,KAAAA,CAAE,KAAA;AAAA,EACX;AACA,EAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,SAAA,CAAU,KAAA,CAAM,CAAC,CAAC,CAAA;AACrD,EAAA,IAAI,CAAC,MAAM,OAAA,EAAS;AAClB,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,4BAA4B,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,CAAA,EAAK,CAAA;AACjF,IAAA,OAAOA,KAAAA,CAAE,KAAA;AAAA,EACX;AACA,EAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,CAAO,IAAA,EAAK,EAAG,KAAA,EAAO,KAAA,CAAM,IAAA,EAAM,KAAA,EAAO,KAAA,CAAM,CAAC,CAAA,EAAY;AAC/E,CAAC,CAAA;AAEI,IAAM,aAAA,GAAgB,CAAC,QAAA,EAAU,QAAA,EAAU,QAAQ;AAE1D,IAAM,WAAA,GAAcA,MAAE,YAAA,CAAa;AAAA,EACjC,MAAA,EAAQA,KAAAA,CAAE,IAAA,CAAK,aAAa,CAAA;AAAA,EAC5B,QAAA,EAAU,iBAAiB,QAAA;AAC7B,CAAC,CAAA;AAEM,IAAM,YAAA,GAAeA,MACzB,YAAA,CAAa;AAAA,EACZ,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,QAAA,EAAU,sBAAsB,QAAA,EAAS;AAAA,EACzC,QAAQA,KAAAA,CAAE,MAAA,CAAO,gBAAA,EAAkB,iBAAiB,EAAE,QAAA,EAAS;AAAA,EAC/D,SAAA,EAAWA,KAAAA,CAAE,KAAA,CAAM,oBAAoB,EAAE,QAAA,EAAS;AAAA;AAAA,EAElD,QAAA,EAAUA,MAAE,KAAA,CAAM,CAACA,MAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,EAAGA,KAAAA,CAAE,MAAMA,KAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,CAAC,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKxE,SAASA,KAAAA,CAAE,MAAA,CAAO,gBAAA,EAAkBc,iBAAgB,EAAE,QAAA,EAAS;AAAA,EAC/D,KAAA,EAAO,YAAY,QAAA;AACrB,CAAC,CAAA,CACA,WAAA,CAAY,CAAC,MAAA,EAAQ,GAAA,KAAQ;AAC5B,EAAA,MAAM,SAAS,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,MAAA,IAAU,EAAE,CAAA;AAC9C,EAAA,IAAI,MAAA,CAAO,YAAY,iBAAA,CAAkB,MAAA,CAAO,SAAS,GAAG,CAAA,CAAE,SAAS,CAAA,EAAG;AACxE,IAAA,GAAA,CAAI,QAAA,CAAS;AAAA,MACX,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS,kEAAA;AAAA,MACT,IAAA,EAAM,CAAC,UAAU;AAAA,KAClB,CAAA;AAAA,EACH;AACA,EAAA,KAAA,MAAW,KAAA,IAAS,cAAA,CAAe,MAAA,CAAO,QAAA,EAAU,IAAI,GAAA,CAAI,MAAM,CAAA,EAAG,MAAA,CAAO,OAAA,KAAY,MAAS,CAAA,EAAG;AAClG,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,OAAO,IAAA,EAAM,CAAC,UAAU,CAAA,EAAG,CAAA;AAAA,EACrE;AAGA,EAAA,IAAI,MAAA,CAAO,WAAW,MAAA,CAAO,IAAA,CAAK,OAAO,OAAO,CAAA,CAAE,WAAW,CAAA,EAAG;AAC9D,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,4CAA4C,IAAA,EAAM,CAAC,SAAS,CAAA,EAAG,CAAA;AAAA,EACzG;AACA,EAAA,KAAA,MAAW,CAACX,QAAO,KAAK,CAAA,IAAA,CAAM,OAAO,SAAA,IAAa,EAAC,EAAG,OAAA,EAAQ,EAAG;AAC/D,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,KAAK,CAAA,EAAG;AACjC,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,CAAA,uCAAA,EAA0C,KAAA,CAAM,KAAK,CAAA,CAAA,CAAA;AAAA,QAC9D,IAAA,EAAM,CAAC,WAAA,EAAaA,MAAK;AAAA,OAC1B,CAAA;AAAA,IACH;AAAA,EACF;AACF,CAAC;AAII,SAAS,mBAAmBY,IAAAA,EAAuB;AACxD,EAAA,MAAM,cAAA,GAAiBA,IAAAA,CAAI,OAAA,CAAQ,qBAAA,EAAuB,IAAI,CAAA;AAC9D,EAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,cAAA,CAAe,QAAA,CAAS,mBAAmB,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,CAAC,CAAW,CAAA;AACjG,EAAA,OAAO,CAAC,GAAG,IAAI,GAAA,CAAI,KAAK,CAAC,CAAA;AAC3B;AAGO,SAAS,uBAAuB,QAAA,EAAgD;AACrF,EAAA,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,GAAI,QAAA,GAAW,CAAC,QAAQ,CAAA,EAAG,GAAA,CAAI,CAAC,SAAA,KAAc,SAAA,CAAU,MAAM,CAAA;AAC9F;AAMA,IAAM,qBAAA,GAA+C;AAAA,EACnD,qEAAA;AAAA,EACA,0EAAA;AAAA,EACA;AACF,CAAA;AAUO,SAAS,mBAAmB,MAAA,EAAoC;AACrE,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,KAAA,MAAW,SAAA,IAAa,sBAAA,CAAuB,MAAA,CAAO,QAAQ,CAAA,EAAG;AAC/D,IAAA,MAAM,MAAA,GAAS,SAAA,CAAU,OAAA,CAAQ,qBAAA,EAAuB,IAAI,CAAA;AAC5D,IAAA,KAAA,MAAW,WAAW,qBAAA,EAAuB;AAC3C,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA;AACjC,MAAA,IAAI,CAAC,KAAA,EAAO;AACZ,MAAA,MAAM,KAAA,GAAS,KAAA,CAAM,CAAC,CAAA,CAAa,WAAA,EAAY;AAC/C,MAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,EAAG;AACpB,QAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AACd,QAAA,OAAA,CAAQ,KAAK,KAAK,CAAA;AAAA,MACpB;AACA,MAAA;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,cAAA,CACP,QAAA,EACA,cAAA,EACA,UAAA,EACU;AACV,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,MAAM,UAAA,GAAa,uBAAuB,QAAQ,CAAA;AAClD,EAAA,UAAA,CAAW,OAAA,CAAQ,CAAC,SAAA,EAAWZ,MAAAA,KAAU;AAEvC,IAAA,MAAM,cAAA,GAAiB,SAAA,CAAU,OAAA,CAAQ,qBAAA,EAAuB,IAAI,CAAA;AACpE,IAAA,MAAM,KAAK,UAAA,CAAW,MAAA,GAAS,IAAI,CAAA,YAAA,EAAeA,MAAAA,GAAQ,CAAC,CAAA,CAAA,CAAA,GAAM,EAAA;AACjE,IAAA,IAAI,CAAC,sBAAsB,IAAA,CAAK,SAAS,GAAG,MAAA,CAAO,IAAA,CAAK,CAAA,0CAAA,EAA6C,EAAE,CAAA,CAAE,CAAA;AACzG,IAAA,IAAI,cAAA,CAAe,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,CAAA,8CAAA,EAAiD,EAAE,CAAA,CAAE,CAAA;AACxH,IAAA,IAAI,mBAAA,CAAoB,KAAK,cAAc,CAAA,SAAU,IAAA,CAAK,CAAA,sCAAA,EAAyC,EAAE,CAAA,CAAE,CAAA;AACvG,IAAA,IAAI,oBAAA,CAAqB,KAAK,cAAc,CAAA,SAAU,IAAA,CAAK,CAAA,2CAAA,EAA8C,EAAE,CAAA,CAAE,CAAA;AAC7G,IAAA,IAAI,qBAAA,CAAsB,KAAK,cAAc,CAAA,SAAU,IAAA,CAAK,CAAA,gDAAA,EAA8C,EAAE,CAAA,CAAE,CAAA;AAE9G,IAAA,IAAI,cAAA,CAAe,SAAS,GAAG,CAAA,SAAU,IAAA,CAAK,CAAA,+CAAA,EAAkD,EAAE,CAAA,CAAE,CAAA;AACpG,IAAA,IAAI,wBAAwB,IAAA,CAAK,cAAA,CAAe,QAAQ,yBAAA,EAA2B,EAAE,CAAC,CAAA,EAAG;AACvF,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,+EAAA,EAA6E,EAAE,CAAA,CAAE,CAAA;AAAA,IAC/F;AAGA,IAAA,IAAI,iBAAA,CAAkB,KAAK,cAAc,CAAA,IAAK,EAAE,UAAA,IAAcA,MAAAA,KAAU,UAAA,CAAW,MAAA,GAAS,CAAA,CAAA,EAAI;AAC9F,MAAA,MAAA,CAAO,IAAA;AAAA,QACL,UAAA,GACI,CAAA,kDAAA,EAAqD,EAAE,CAAA,CAAA,GACvD,qEAAqE,EAAE,CAAA;AAAA,OAC7E;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AACD,EAAA,MAAM,IAAA,GAAO,UAAA,CAAW,EAAA,CAAG,EAAE,CAAA;AAC7B,EAAA,IAAI,UAAA,IAAc,IAAA,IAAQ,CAAC,iBAAA,CAAkB,IAAA,CAAK,KAAK,OAAA,CAAQ,qBAAA,EAAuB,IAAI,CAAC,CAAA,EAAG;AAC5F,IAAA,MAAA,CAAO,KAAK,yFAAyF,CAAA;AAAA,EACvG;AACA,EAAA,MAAM,UAAA,GAAa,kBAAA,CAAmB,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,IAAA,KAAS,CAAC,cAAA,CAAe,GAAA,CAAI,IAAI,CAAC,CAAA;AACvG,EAAA,IAAI,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,0CAA0C,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AACxG,EAAA,OAAO,MAAA;AACT;;;ACrMA,IAAM,cAAA,GAAgE;AAAA,EACpE,MAAA,EAAQ,kBAAA;AAAA,EACR,WAAA,EAAa;AACf,CAAA;AAEO,IAAM,WAAA,GAAc,CAAC,IAAA,KAA6B,cAAA,CAAe,IAAI,CAAA,IAAK;;;ACP1E,IAAM,cAAA,GAAiB;AAGvB,IAAM,sBAAA,GAAyB;AAE/B,IAAM,eAAA,GAAkB,CAAC,IAAA,KAAyB,CAAA,CAAA,EAAI,KAAK,UAAA,CAAW,GAAA,EAAK,IAAI,CAAC,CAAA,CAAA;AAEhF,IAAM,YAAA,GAAe,CAAC,KAAA,KAA0B,CAAA,CAAA,EAAI,MAAM,UAAA,CAAW,GAAA,EAAK,IAAI,CAAC,CAAA,CAAA;AAGtF,IAAM,aAAA,GAAgB,2BAA2B,cAAc,CAAA,oBAAA,CAAA;AAExD,IAAM,eAAA,GAAkB,CAAC,GAAA,KAAwB,CAAA,CAAA,EAAI,aAAa,CAAA,KAAA,EAAQ,YAAA,CAAa,GAAG,CAAC,CAAA,CAAA;AAG3F,IAAM,oBAAA,GAAuB,CAAC,GAAA,KACnC,CAAA,SAAA,EAAY,aAAa,QAAQ,sBAAsB,CAAA,IAAA,EAAO,YAAA,CAAa,GAAG,CAAC,CAAA,QAAA;;;ACZjF,IAAM,eAAA,GAAuD;AAAA,EAC3D,GAAA,EAAK,GAAA;AAAA,EACL,IAAA,EAAM,IAAA;AAAA,EACN,GAAA,EAAK,GAAA;AAAA,EACL,IAAA,EAAM,IAAA;AAAA,EACN,GAAA,EAAK,GAAA;AAAA,EACL,IAAA,EAAM;AACR,CAAA;AAKA,SAAS,cAAA,CAAe,OAAA,EAAkB,KAAA,EAAgB,WAAA,EAA4C;AACpG,EAAA,IAAI,QAAQ,IAAA,KAAS,QAAA,EAAU,OAAO,eAAA,CAAgB,QAAQ,IAAI,CAAA;AAClE,EAAA,IAAI,OAAA,CAAQ,SAAS,OAAA,EAAS;AAC5B,IAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,OAAA,CAAQ,GAAG,CAAA;AAI9C,IAAA,MAAM,aAAa,KAAA,CAAM,IAAA,KAAS,WAAW,WAAA,GAAc,KAAA,CAAM,IAAI,CAAA,GAAI,MAAA;AACzE,IAAA,OAAO,UAAA,IAAc,eAAe,MAAA,GAAS,CAAA,CAAA,EAAI,UAAU,CAAA,GAAA,EAAM,WAAA,CAAY,UAAU,CAAC,CAAA,CAAA,GAAK,UAAA;AAAA,EAC/F;AACA,EAAA,MAAM,EAAE,OAAM,GAAI,OAAA;AAClB,EAAA,IAAI,KAAA,KAAU,MAAM,OAAO,MAAA;AAC3B,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,aAAa,KAAK,CAAA;AACxD,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAEA,SAAS,iBAAA,CAAkB,EAAA,EAAe,IAAA,EAAe,KAAA,EAAgB,WAAA,EAA4C;AACnH,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,KAAS,SAAA,IAAa,KAAK,KAAA,KAAU,IAAA,GAAO,KAAA,GAAQ,KAAA,CAAM,IAAA,KAAS,SAAA,IAAa,KAAA,CAAM,KAAA,KAAU,OAAO,IAAA,GAAO,IAAA;AACpI,EAAA,IAAI,QAAA,KAAa,EAAA,KAAO,GAAA,IAAO,EAAA,KAAO,IAAA,CAAA,EAAO;AAC3C,IAAA,OAAO,CAAA,EAAG,cAAA,CAAe,QAAA,EAAU,QAAA,EAAU,WAAW,CAAC,CAAA,GAAA,EAAM,EAAA,KAAO,IAAA,GAAO,MAAA,GAAS,EAAE,CAAA,KAAA,CAAA;AAAA,EAC1F;AACA,EAAA,OAAO,CAAA,EAAG,cAAA,CAAe,IAAA,EAAM,KAAA,EAAO,WAAW,CAAC,CAAA,CAAA,EAAI,eAAA,CAAgB,EAAE,CAAC,CAAA,CAAA,EAAI,cAAA,CAAe,KAAA,EAAO,IAAA,EAAM,WAAW,CAAC,CAAA,CAAA;AACvH;AAGO,SAAS,gBAAA,CAAiB,WAAsB,WAAA,EAA4C;AACjG,EAAA,QAAQ,UAAU,IAAA;AAAM,IACtB,KAAK,KAAA;AAAA,IACL,KAAK,IAAA,EAAM;AACT,MAAA,MAAM,SAAS,SAAA,CAAU,QAAA,CAAS,GAAA,CAAI,CAAC,YAAY,gBAAA,CAAiB,OAAA,EAAS,WAAW,CAAC,EAAE,IAAA,CAAK,CAAA,CAAA,EAAI,UAAU,IAAA,CAAK,WAAA,EAAa,CAAA,CAAA,CAAG,CAAA;AACnI,MAAA,OAAO,IAAI,MAAM,CAAA,CAAA,CAAA;AAAA,IACnB;AAAA,IACA,KAAK,KAAA;AACH,MAAA,OAAO,CAAA,KAAA,EAAQ,gBAAA,CAAiB,SAAA,CAAU,OAAA,EAAS,WAAW,CAAC,CAAA,CAAA,CAAA;AAAA,IACjE,KAAK,SAAA;AACH,MAAA,OAAO,CAAA,CAAA,EAAI,kBAAkB,SAAA,CAAU,EAAA,EAAI,UAAU,IAAA,EAAM,SAAA,CAAU,KAAA,EAAO,WAAW,CAAC,CAAA,CAAA,CAAA;AAAA,IAC1F,KAAK,YAAA;AACH,MAAA,OAAO,CAAA,CAAA,EAAI,oBAAA,CAAqB,SAAA,CAAU,GAAG,CAAC,CAAA,CAAA,CAAA;AAAA;AAEpD;;;ACvCA,IAAMa,sBAAAA,GAAwB,iBAAA;AAM9B,IAAM,aAAA,GACJ,mHAAA;AACF,IAAM,iBAAA,GAAoB,6BAAA;AAS1B,IAAM,aAAA,GAAyD;AAAA,EAC7D,IAAA,EAAMhB,MAAE,MAAA,EAAO;AAAA,EACf,IAAA,EAAMA,MAAE,MAAA,EAAO;AAAA,EACf,OAAA,EAASA,KAAAA,CAAE,KAAA,CAAM,CAACA,KAAAA,CAAE,QAAO,EAAGA,KAAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AAAA,EACzC,MAAA,EAAQA,KAAAA,CAAE,KAAA,CAAM,CAACA,KAAAA,CAAE,QAAO,EAAGA,KAAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AAAA,EACxC,OAAA,EAASA,KAAAA,CAAE,KAAA,CAAM,CAACA,KAAAA,CAAE,QAAO,EAAGA,KAAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AAAA,EACzC,MAAA,EAAQA,KAAAA,CAAE,KAAA,CAAM,CAACA,KAAAA,CAAE,QAAO,EAAGA,KAAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AAAA,EACxC,OAAA,EAASA,KAAAA,CAAE,KAAA,CAAM,CAACA,KAAAA,CAAE,SAAQ,EAAGA,KAAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AAAA,EAC1C,WAAA,EAAaA,MAAE,MAAA,EAAO;AAAA,EACtB,IAAA,EAAMA,MAAE,MAAA,EAAO;AAAA,EACf,KAAA,EAAOA,MAAE,OAAA;AACX,CAAA;AAEO,SAAS,wBAAwB,MAAA,EAA8D;AACpG,EAAA,MAAM,QAAmC,EAAC;AAC1C,EAAA,MAAM,UAAU,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,MAAA,IAAU,EAAE,CAAA;AAClD,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,OAAA,EAAS;AAGnC,IAAA,KAAA,CAAM,IAAI,CAAA,GAAI,KAAA,CAAM,QAAA,GAAW,aAAA,CAAc,KAAA,CAAM,IAAI,CAAA,CAAE,OAAA,EAAQ,GAAI,aAAA,CAAc,KAAA,CAAM,IAAI,CAAA;AAAA,EAC/F;AACA,EAAA,OAAOA,MAAE,YAAA,CAAa,KAAK,EAAE,WAAA,CAAY,CAAC,KAAK,GAAA,KAAQ;AAIrD,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,OAAA,EAAS;AACnC,MAAA,IAAI,CAAC,MAAM,QAAA,IAAY,KAAA,CAAM,SAAS,OAAA,IAAY,GAAA,CAAgC,IAAI,CAAA,KAAM,MAAA,EAAW;AACrG,QAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,YAAY,IAAA,EAAM,CAAC,IAAI,CAAA,EAAG,CAAA;AAAA,MACpE;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AACH;AAGO,IAAM,gBAAA,GAAmB,CAAC,MAAA,KAAuC,MAAA,CAAO,KAAK,MAAA,CAAO,MAAA,IAAU,EAAE;AAGhG,IAAM,cAAA,GAAiB,CAAC,IAAA,KAAyB,CAAA,EAAA,EAAK,IAAI,CAAA;AAU1D,SAAS,uBAAA,CACd,MAAA,EACA,WAAA,GAAwC,cAAA,EAC9B;AACV,EAAA,OAAO,sBAAA,CAAuB,MAAA,CAAO,QAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,SAAA,KAAc,gBAAA,CAAiB,SAAA,EAAW,WAAW,CAAC,CAAA;AAC5G;AAEA,SAAS,gBAAA,CAAiBe,MAAa,WAAA,EAA+C;AACpF,EAAA,MAAM,QAAA,GAAWA,KAAI,OAAA,CAAQ,aAAA,EAAe,CAAC,KAAA,EAAO,QAAA,EAAmB,eAAwB,SAAA,KAAuB;AACpH,IAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,MAAA,IAAI,CAAC,iBAAA,CAAkB,IAAA,CAAK,QAAQ,CAAA,QAAS,IAAI,kBAAA,CAAmB,CAAA,+BAAA,EAAkC,KAAK,CAAA,CAAE,CAAA;AAC7G,MAAA,OAAO,gBAAgB,QAAQ,CAAA;AAAA,IACjC;AACA,IAAA,IAAI,kBAAkB,MAAA,EAAW;AAC/B,MAAA,IAAI,CAAC,sBAAA,CAAuB,IAAA,CAAK,aAAa,CAAA,EAAG;AAC/C,QAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,oCAAA,EAAuC,KAAK,CAAA,CAAE,CAAA;AAAA,MAC7E;AACA,MAAA,OAAO,qBAAqB,aAAa,CAAA;AAAA,IAC3C;AACA,IAAA,IAAI,SAAA,KAAc,MAAA,EAAW,OAAO,WAAA,CAAY,SAAS,CAAA;AACzD,IAAA,OAAO,KAAA;AAAA,EACT,CAAC,CAAA;AAID,EAAA,IAAI,kBAAkB,IAAA,CAAK,QAAA,CAAS,QAAQC,sBAAAA,EAAuB,IAAI,CAAC,CAAA,EAAG;AACzE,IAAA,MAAM,IAAI,mBAAmB,mEAAmE,CAAA;AAAA,EAClG;AACA,EAAA,OAAO,QAAA;AACT;AAGO,SAAS,sBAAsB,MAAA,EAAyC;AAC7E,EAAA,OAAO,OAAO,QAAA,GAAW,gBAAA,CAAiB,MAAA,CAAO,QAAA,CAAS,GAAG,CAAA,GAAI,IAAA;AACnE;AAGO,SAAS,8BAA8B,MAAA,EAAoC;AAChF,EAAA,MAAM,OAAiB,EAAC;AACxB,EAAA,KAAA,MAAW,SAAA,IAAa,sBAAA,CAAuB,MAAA,CAAO,QAAQ,CAAA,EAAG;AAC/D,IAAA,KAAA,MAAW,KAAA,IAAS,SAAA,CAAU,QAAA,CAAS,aAAa,CAAA,EAAG;AACrD,MAAA,IAAI,KAAA,CAAM,CAAC,CAAA,KAAM,MAAA,OAAgB,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,IAChD;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;;;AC3GO,IAAM,+BAAA,GAAkC;AACxC,IAAM,gCAAA,GAAmC;AAGzC,IAAM,kBAAA,GAAqB,CAAC,UAAA,KAA+B,CAAA,OAAA,EAAU,UAAU,CAAA;AAWtF,SAAS,gBAAA,CAAiB,SAAmD,aAAA,EAA+B;AAC1G,EAAA,MAAM,UAAA,GAAa,OAAO,IAAA,CAAK,OAAO,EAAE,GAAA,CAAI,eAAe,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AACtE,EAAA,OAAO,CAAA,uBAAA,EAA0B,aAAa,CAAA,SAAA,EAAY,UAAU,CAAA,mBAAA,CAAA;AACtE;AAOA,IAAM,aAAa,CAAC,UAAA,KAClB,UAAA,CAAW,MAAA,CACR,QAAQ,CAAC,KAAA,KAAU,MAAA,CAAO,OAAA,CAAQ,MAAM,OAAA,IAAW,EAAE,CAAA,CAAE,IAAI,CAAC,CAAC,IAAA,EAAM,MAAM,OAAO,EAAE,IAAA,EAAM,MAAA,EAAO,CAAE,CAAC,CAAA,CAClG,IAAA,CAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,IAAA,CAAK,aAAA,CAAc,CAAA,CAAE,IAAI,CAAC,CAAA;AAezC,SAAS,yBAAyB,UAAA,EAA2C;AAClF,EAAA,MAAM,MAAA,GAAS,aAAA,CAAc,UAAA,CAAW,SAAS,CAAA;AACjD,EAAA,OAAO,CAAC,sBAAA,CAAuB,MAAM,GAAG,GAAG,UAAA,CAAW,UAAU,CAAA,CAAE,OAAA,CAAQ,CAAC,EAAE,IAAA,EAAM,QAAO,KAAM,oBAAA,CAAqB,YAAY,IAAA,EAAM,MAAM,CAAC,CAAC,CAAA;AACjJ;AAUO,SAAS,oBAAoB,UAAA,EAA2C;AAC7E,EAAA,MAAM,OAAA,GAAU,WAAW,UAAU,CAAA;AACrC,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAClC,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,yBAAA,EAA4B,eAAA,CAAgB,cAAc,UAAA,CAAW,SAAS,CAAC,CAAC,CAAA,CAAE,CAAA;AACtG,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,MAAA,EAAO,IAAK,OAAA,EAAS;AACtC,IAAA,MAAM,KAAA,GAAQ,iBAAiB,MAAM,CAAA;AACrC,IAAA,MAAM,SAAA,GAAY,MAAM,MAAA,GAAS,CAAA,GAAI,KAAK,KAAA,CAAM,GAAA,CAAI,CAAC,KAAA,KAAU,WAAA,CAAY,OAAO,MAAA,CAAQ,KAAK,EAAG,IAAI,CAAC,EAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA,GAAM,EAAA;AACzH,IAAA,MAAM,QAAA,GAAW,uBAAA,CAAwB,MAAA,EAAQ,CAAC,KAAA,KAAU,CAAA,CAAA,EAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,CAAC,CAAA,CAAE,CAAA;AAC1F,IAAA,QAAA,CAAS,OAAA,CAAQ,CAACD,IAAAA,EAAKZ,MAAAA,KAAU;AAI/B,MAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,IAAWA,MAAAA,KAAU,QAAA,CAAS,MAAA,GAAS,CAAA,GAAI,gBAAA,CAAiB,MAAA,CAAO,OAAA,EAASY,IAAG,CAAA,GAAIA,IAAAA;AAC1G,MAAA,UAAA,CAAW,IAAA,CAAK,CAAA,QAAA,EAAW,eAAA,CAAgB,CAAA,UAAA,EAAa,IAAI,CAAA,CAAA,EAAIZ,MAAK,CAAA,CAAE,CAAC,CAAA,EAAG,SAAS,CAAA,IAAA,EAAO,OAAO,CAAA,CAAE,CAAA;AAAA,IACtG,CAAC,CAAA;AAAA,EACH;AACA,EAAA,OAAO,UAAA;AACT;AAOA,SAAS,uBAAuB,MAAA,EAAwB;AACtD,EAAA,OAAO,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAA,EAQe,YAAA,CAAa,MAAM,CAAC,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAA,CAAA;AAM5C;AAEA,SAAS,oBAAA,CAAqB,UAAA,EAAiC,IAAA,EAAc,MAAA,EAAoC;AAC/G,EAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,aAAA,CAAc,UAAA,CAAW,SAAS,CAAC,CAAA;AAClE,EAAA,MAAM,EAAA,GAAK,GAAG,MAAM,CAAA,CAAA,EAAI,gBAAgB,kBAAA,CAAmB,IAAI,CAAC,CAAC,CAAA,CAAA;AACjE,EAAA,MAAM,KAAA,GAAQ,iBAAiB,MAAM,CAAA;AACrC,EAAA,MAAM,SAAA,GAAY,MACf,GAAA,CAAI,CAAC,cAAc,CAAA,EAAG,eAAA,CAAgB,cAAA,CAAe,SAAS,CAAC,CAAC,IAAI,WAAA,CAAY,MAAA,CAAO,OAAQ,SAAS,CAAA,CAAG,IAAI,CAAC,CAAA,CAAE,CAAA,CAClH,IAAA,CAAK,IAAI,CAAA;AACZ,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,GAAA,CAAI,CAAC,cAAc,WAAA,CAAY,MAAA,CAAO,MAAA,CAAQ,SAAS,CAAA,CAAG,IAAI,CAAC,CAAA,CAAE,KAAK,IAAI,CAAA;AACjG,EAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,gBAAA,CAAiB,UAAA,CAAW,SAAS,CAAC,CAAA;AAInE,EAAA,MAAM,UAAA,GAAa,wBAAwB,MAAM,CAAA;AACjD,EAAA,MAAM,IAAA,GAAO,UAAA,CAAW,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA;AAC7C,EAAA,MAAM,OAAA,GAAU,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,SAAA,KAAc,CAAA,EAAA,EAAK,SAAS,CAAA,CAAA,CAAG,CAAA;AAC5E,EAAA,MAAM,SAAS,MAAA,CAAO,OAAA;AAAA;AAAA,IAElB,CAAA,gBAAA,EAAmB,EAAE,CAAA,CAAA,EAAI,SAAS,CAAA;AAAA,cAAA,EACxB,MAAA,CAAO,QAAQ,MAAA,CAAO,OAAO,EACpC,GAAA,CAAI,CAAC,CAAC,MAAA,EAAQ,IAAI,CAAA,KAAM,GAAG,eAAA,CAAgB,MAAM,CAAC,CAAA,CAAA,EAAI,WAAA,CAAY,IAAI,CAAC,CAAA,CAAE,CAAA,CACzE,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA;AAAA;AAAA,kBAAA,EAGC,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMxB,CAAC,eAAe,UAAA,EAAY,IAAA,EAAM,MAAM,CAAA,EAAG,GAAG,SAAS,CAAA,eAAA,EAAkB,gBAAA,CAAiB,OAAO,OAAA,EAAS,IAAI,CAAC,CAAA,CAAA,CAAG,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC;AAAA;AAAA,YAAA;AAAA;AAAA;AAAA,IAI1I,CAAA,gBAAA,EAAmB,EAAE,CAAA,CAAA,EAAI,SAAS,CAAA;AAAA;AAAA;AAAA;AAAA,kBAAA,EAIpB,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,EAKxB,CAAC,cAAA,CAAe,UAAA,EAAY,IAAA,EAAM,MAAM,GAAG,GAAG,OAAA,EAAS,CAAA,EAAA,EAAK,IAAI,GAAG,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,YAAA;AAAA,GAAA;AAS/F,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,CAAA,uBAAA,EAA0B,EAAE,CAAA,CAAA,EAAI,QAAQ,CAAA,aAAA,CAAA;AAAA,IACxC,CAAA,0BAAA,EAA6B,EAAE,CAAA,CAAA,EAAI,QAAQ,QAAQ,IAAI,CAAA;AAAA,GACzD;AACF;AAGA,SAAS,cAAA,CAAe,UAAA,EAAiC,IAAA,EAAc,MAAA,EAAkC;AACvG,EAAA,MAAM,QAAkB,EAAC;AAEzB,EAAA,MAAM,QAAA,GAAW,sBAAsB,MAAM,CAAA;AAC7C,EAAA,IAAI,QAAA,EAAU;AAGZ,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,aAAa,QAAQ,CAAA,MAAA,CAAA;AAAA,MACrB,CAAA,4BAAA,EAA+B,IAAI,CAAA,4DAAA,EAA+D,YAAA,CAAa,+BAA+B,CAAC,CAAA,CAAA,CAAA;AAAA,MAC/I,CAAA,SAAA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,SAAA,IAAa,EAAC,EAAG;AAC1C,IAAA,MAAM,EAAE,MAAA,EAAQ,KAAA,EAAO,KAAI,GAAI,sBAAA,CAAuB,YAAY,KAAK,CAAA;AACvE,IAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,cAAA,CAAe,KAAA,CAAM,KAAK,CAAC,CAAA;AAIvD,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,CAAA,KAAA,EAAQ,GAAG,CAAA,2CAAA,EAA8C,eAAA,CAAgB,MAAM,CAAC,CAAA,CAAA,EAAI,eAAA,CAAgB,KAAK,CAAC,CAAA,OAAA,EAAU,eAAA,CAAgB,GAAG,CAAC,MAAM,GAAG,CAAA,gBAAA,CAAA;AAAA,MACjJ,CAAA,0CAAA,EAA6C,MAAM,KAAK,CAAA,SAAA,EAAY,MAAM,KAAK,CAAA,kBAAA,EAAqB,YAAA,CAAa,gCAAgC,CAAC,CAAA,CAAA,CAAA;AAAA,MAClJ,CAAA,SAAA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAEA,SAAS,sBAAA,CACP,YACA,KAAA,EACgD;AAChD,EAAA,IAAI,KAAA,CAAM,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,EAAG;AAC7B,IAAA,MAAM,CAAC,MAAA,EAAQ,KAAK,IAAI,KAAA,CAAM,KAAA,CAAM,MAAM,GAAG,CAAA;AAC7C,IAAA,OAAO,EAAE,MAAA,EAAQ,KAAA,EAAO,GAAA,EAAK,IAAA,EAAK;AAAA,EACpC;AACA,EAAA,MAAM,MAAA,GAAS,WAAW,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,KAAA,KAAU,KAAA,CAAM,KAAK,CAAA;AAC5E,EAAA,MAAM,MAAM,MAAA,IAAU,MAAA,CAAO,QAAQ,MAAA,CAAO,OAAA,IAAW,EAAE,CAAA,CAAE,IAAA,CAAK,CAAC,GAAG,MAAM,MAAM,MAAA,CAAO,WAAW,IAAI,CAAC,CAAA;AACvG,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,GAAA,EAAK;AAGnB,IAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,yBAAA,EAA4B,KAAA,CAAM,KAAK,CAAA,yCAAA,CAA2C,CAAA;AAAA,EACjH;AACA,EAAA,OAAO,EAAE,QAAQ,aAAA,CAAc,UAAA,CAAW,SAAS,CAAA,EAAG,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,GAAA,EAAI;AAChF;AChNA,IAAM,UAAA,GAAaH,MAAE,YAAA,CAAa;AAAA,EAChC,EAAA,EAAI,oBAAA;AAAA,EACJ,EAAA,EAAI,gBAAA;AAAA,EACJ,OAAA,EAASA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC9B,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAC1B,CAAC,CAAA;AAID,IAAM,WAAA,GAAcA,MACjB,KAAA,CAAM;AAAA,EACLA,KAAAA,CAAE,KAAA,CAAM,gBAAgB,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,EAC/BA,MAAE,YAAA,CAAa;AAAA,IACb,SAASA,KAAAA,CAAE,KAAA,CAAM,gBAAgB,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,IACxC,MAAA,EAAQA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,IAC7B,IAAA,EAAM,iBAAiB,QAAA;AAAS,GACjC;AACH,CAAC,CAAA,CACA,SAAA,CAAU,CAACG,MAAAA,KAAW,KAAA,CAAM,OAAA,CAAQA,MAAK,CAAA,GAAI,EAAE,OAAA,EAASA,MAAAA,EAAM,GAAIA,MAAM,CAAA;AAE3E,IAAM,cAAA,GAAiBH,MAAE,YAAA,CAAa;AAAA,EACpC,IAAA,EAAM,sBAAsB,QAAA,EAAS;AAAA,EACrC,KAAA,EAAO,sBAAsB,QAAA;AAC/B,CAAC,CAAA;AAEM,IAAM,eAAA,GAAkBA,MAC5B,YAAA,CAAa;AAAA,EACZ,SAAA,EAAW,eAAA;AAAA,EACX,KAAA,EAAO,gBAAA;AAAA,EACP,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,SAASA,KAAAA,CAAE,MAAA,CAAO,gBAAA,EAAkB,YAAY,EAAE,QAAA,EAAS;AAAA,EAC3D,MAAA,EAAQA,MAAE,MAAA,EAAO,CAAE,MAAM,qBAAA,EAAuB,0CAA0C,EAAE,QAAA,EAAS;AAAA,EACrG,OAAOA,KAAAA,CAAE,MAAA,CAAO,gBAAA,EAAkB,UAAU,EAAE,QAAA,EAAS;AAAA,EACvD,OAAA,EAASA,KAAAA,CAAE,KAAA,CAAM,WAAW,EAAE,QAAA,EAAS;AAAA,EACvC,QAAA,EAAU,eAAe,QAAA,EAAS;AAAA,EAClC,SAASA,KAAAA,CAAE,MAAA,CAAO,gBAAA,EAAkB,YAAY,EAAE,QAAA;AACpD,CAAC,CAAA,CACA,WAAA,CAAY,CAAC,KAAA,EAAO,GAAA,KAAQ;AAC3B,EAAA,IAAI,oBAAA,CAAqB,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA,EAAG;AACzC,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,CAAA,CAAA,EAAI,KAAA,CAAM,KAAK,CAAA,0BAAA,CAAA,EAA8B,IAAA,EAAM,CAAC,OAAO,GAAG,CAAA;AAAA,EACxG;AACA,EAAA,KAAA,MAAW,QAAQ,MAAA,CAAO,IAAA,CAAK,MAAM,OAAA,IAAW,EAAE,CAAA,EAAG;AACnD,IAAA,IAAI,qBAAA,CAAsB,GAAA,CAAI,IAAI,CAAA,EAAG;AACnC,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,WAAW,IAAI,CAAA,yHAAA,CAAA;AAAA,QACxB,IAAA,EAAM,CAAC,SAAA,EAAW,IAAI;AAAA,OACvB,CAAA;AAAA,IACH;AAAA,EACF;AACA,EAAA,IAAI,KAAA,CAAM,MAAA,EAAQ,mBAAA,CAAoB,KAAA,EAAO,GAAG,CAAA;AAAA,OAC3C,mBAAA,CAAoB,OAAO,GAAG,CAAA;AACnC,EAAA,aAAA,CAAc,OAAO,GAAG,CAAA;AACxB,EAAA,qBAAA,CAAsB,OAAO,GAAG,CAAA;AAChC,EAAA,0BAAA,CAA2B,OAAO,GAAG,CAAA;AACvC,CAAC;AAOI,IAAM,SAAA,GAAY,CAAC,KAAA,EAAe,UAAA,KACvC,UAAA,CAAW,IAAA,IAAQ,CAAA,GAAA,EAAM,KAAK,CAAA,CAAA,EAAI,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAGzD,IAAM,aAAa,CAAC,KAAA,EAAe,WAA2B,CAAA,EAAG,KAAK,IAAI,MAAM,CAAA,CAAA;AAGhF,IAAM,iBAAiB,CAAC,KAAA,EAAe,SAAyB,CAAA,GAAA,EAAM,KAAK,IAAI,IAAI,CAAA,CAAA;AAI1F,SAAS,mBAAA,CAAoB,OAAkB,GAAA,EAAsB;AACnE,EAAA,MAAM,SAAA,GAA8C;AAAA,IAClD,CAAC,WAAW,8DAA8D,CAAA;AAAA,IAC1E,CAAC,WAAW,sDAAsD,CAAA;AAAA,IAClE,CAAC,WAAW,yDAAyD;AAAA,GACvE;AACA,EAAA,KAAA,MAAW,CAAC,KAAA,EAAO,OAAO,CAAA,IAAK,SAAA,EAAW;AACxC,IAAA,IAAI,KAAA,CAAM,KAAK,CAAA,KAAM,MAAA,MAAe,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,IAAA,EAAM,CAAC,KAAK,GAAG,CAAA;AAAA,EACzF;AACA,EAAA,IAAI,KAAA,CAAM,UAAU,KAAA,EAAO;AACzB,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,6BAAA,EAA+B,IAAA,EAAM,CAAC,UAAA,EAAY,OAAO,CAAA,EAAG,CAAA;AAAA,EACtG;AACF;AAEA,SAAS,eAAA,CACP,OAAA,EACA,KAAA,EACA,GAAA,EACM;AACN,EAAA,MAAM,aAAA,uBAAoB,GAAA,EAAoB;AAC9C,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,IAAI,CAAA,EAAG,YAAA;AACnC,IAAA,IAAI,CAAC,WAAA,EAAa;AAClB,IAAA,IAAI,WAAA,KAAgB,IAAA,IAAQ,KAAA,CAAM,QAAA,CAAS,WAAW,CAAA,EAAG;AACvD,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,uDAAA;AAAA,QACT,IAAA,EAAM,CAAC,SAAA,EAAW,IAAA,EAAM,cAAc;AAAA,OACvC,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,OAAA,GAAU,aAAA,CAAc,GAAA,CAAI,WAAW,CAAA;AAC7C,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,CAAA,cAAA,EAAiB,WAAW,CAAA,yBAAA,EAA4B,OAAO,CAAA,CAAA,CAAA;AAAA,QACxE,IAAA,EAAM,CAAC,SAAA,EAAW,IAAA,EAAM,cAAc;AAAA,OACvC,CAAA;AAAA,IACH;AACA,IAAA,aAAA,CAAc,GAAA,CAAI,aAAa,IAAI,CAAA;AAAA,EACrC;AACF;AAEA,SAAS,mBAAA,CAAoB,OAAkB,GAAA,EAAsB;AACnE,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,IAAW,EAAC;AAClC,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AACjC,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,4CAA4C,IAAA,EAAM,CAAC,SAAS,CAAA,EAAG,CAAA;AACvG,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,WAAA,GAAc,MAAM,MAAA,CAAO,CAAC,SAAS,OAAA,CAAQ,IAAI,GAAG,WAAW,CAAA;AACrE,EAAA,IAAI,WAAA,CAAY,WAAW,CAAA,EAAG;AAC5B,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,0CAA0C,IAAA,EAAM,CAAC,SAAS,CAAA,EAAG,CAAA;AAAA,EACvG;AAEA,EAAA,eAAA,CAAgB,OAAA,EAAS,OAAO,GAAG,CAAA;AACnC,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,MAAA,GAAS,QAAQ,IAAI,CAAA;AAC3B,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,MAAM,OAAO,MAAA,CAAO,IAAA,GAAO,SAAA,CAAU,MAAA,CAAO,IAAI,CAAA,GAAI,IAAA;AACpD,IAAA,IAAI,MAAA,CAAO,IAAA,IAAQ,IAAA,EAAM,MAAA,KAAW,IAAA,EAAM;AACxC,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,kDAAA;AAAA,QACT,IAAA,EAAM,CAAC,SAAA,EAAW,IAAA,EAAM,MAAM;AAAA,OAC/B,CAAA;AAAA,IACH;AACA,IAAA,IAAI,IAAA,IAAQ,IAAA,CAAK,IAAA,KAAS,MAAA,CAAO,IAAA,EAAM;AACrC,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,SAAS,CAAA,aAAA,EAAgB,IAAA,CAAK,IAAI,CAAA,gCAAA,EAAmC,OAAO,IAAI,CAAA,CAAA,CAAA;AAAA,QAChF,IAAA,EAAM,CAAC,SAAA,EAAW,IAAA,EAAM,MAAM;AAAA,OAC/B,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,CAAC,UAAUG,MAAK,CAAA,IAAA,CAAM,MAAM,OAAA,IAAW,EAAC,EAAG,OAAA,EAAQ,EAAG;AAC/D,IAAA,IAAI,IAAI,IAAIA,MAAAA,CAAM,OAAO,EAAE,IAAA,KAASA,MAAAA,CAAM,QAAQ,MAAA,EAAQ;AACxD,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,qCAAA;AAAA,QACT,IAAA,EAAM,CAAC,SAAA,EAAW,QAAQ;AAAA,OAC3B,CAAA;AAAA,IACH;AACA,IAAA,KAAA,MAAW,MAAA,IAAUA,OAAM,OAAA,EAAS;AAClC,MAAA,IAAI,CAAC,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA,EAAG;AAC3B,QAAA,GAAA,CAAI,QAAA,CAAS;AAAA,UACX,IAAA,EAAM,QAAA;AAAA,UACN,OAAA,EAAS,oCAAoC,MAAM,CAAA,CAAA,CAAA;AAAA,UACnD,IAAA,EAAM,CAAC,SAAA,EAAW,QAAQ;AAAA,SAC3B,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,aAAA,CAAc,OAAkB,GAAA,EAAsB;AAC7D,EAAA,MAAM,cAAc,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA;AACnD,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,MAAA,CAAO,QAAQ,KAAA,CAAM,KAAA,IAAS,EAAE,CAAA,EAAG;AAC5D,IAAA,IAAI,CAAC,MAAM,MAAA,IAAU,CAAC,YAAY,QAAA,CAAS,IAAA,CAAK,EAAE,CAAA,EAAG;AACnD,MAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,SAAS,CAAA,gCAAA,EAAmC,IAAA,CAAK,EAAE,CAAA,CAAA,CAAA,EAAK,MAAM,CAAC,OAAA,EAAS,IAAA,EAAM,IAAI,GAAG,CAAA;AAAA,IACtH;AACA,IAAA,IAAI,KAAK,OAAA,IAAW,IAAA,CAAK,EAAA,CAAG,QAAA,CAAS,GAAG,CAAA,EAAG;AACzC,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,sFAAA;AAAA,QACT,IAAA,EAAM,CAAC,OAAA,EAAS,IAAA,EAAM,SAAS;AAAA,OAChC,CAAA;AAAA,IACH;AACA,IAAA,IAAI,IAAA,CAAK,OAAA,IAAW,KAAA,CAAM,MAAA,EAAQ;AAChC,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,gFAAA;AAAA,QACT,IAAA,EAAM,CAAC,OAAA,EAAS,IAAA,EAAM,SAAS;AAAA,OAChC,CAAA;AAAA,IACH;AAAA,EACF;AACF;AAQA,SAAS,0BAAA,CAA2B,OAAkB,GAAA,EAAsB;AAC1E,EAAA,MAAM,WAAA,GAAc,UAAA,CAAW,KAAA,CAAM,KAAA,EAAO,QAAQ,CAAA;AACpD,EAAA,IAAI,CAAC,KAAA,CAAM,MAAA,IAAU,WAAA,CAAY,SAAS,qBAAA,EAAuB;AAC/D,IAAA,GAAA,CAAI,QAAA,CAAS;AAAA,MACX,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS,CAAA,uDAAA,EAAqD,WAAW,CAAA,qBAAA,EAAwB,qBAAqB,CAAA,sBAAA,CAAA;AAAA,MACtH,IAAA,EAAM,CAAC,OAAO;AAAA,KACf,CAAA;AAAA,EACH;AACA,EAAA,KAAA,MAAW,CAAC,UAAUA,MAAK,CAAA,IAAA,CAAM,MAAM,OAAA,IAAW,EAAC,EAAG,OAAA,EAAQ,EAAG;AAC/D,IAAA,MAAM,IAAA,GAAO,SAAA,CAAU,KAAA,CAAM,KAAA,EAAOA,MAAK,CAAA;AACzC,IAAA,IAAI,IAAA,CAAK,SAAS,qBAAA,EAAuB;AACvC,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,CAAA,oBAAA,EAAuB,IAAI,CAAA,qBAAA,EAAwB,qBAAqB,CAAA,yDAAA,CAAA;AAAA,QACjF,IAAA,EAAM,CAAC,SAAA,EAAW,QAAQ;AAAA,OAC3B,CAAA;AAAA,IACH;AAAA,EACF;AACA,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,MAAA,CAAO,QAAQ,KAAA,CAAM,KAAA,IAAS,EAAE,CAAA,EAAG;AAC5D,IAAA,MAAM,UAAA,GAAa,cAAA,CAAe,KAAA,CAAM,KAAA,EAAO,IAAI,CAAA;AACnD,IAAA,IAAI,IAAA,CAAK,OAAA,IAAW,UAAA,CAAW,MAAA,GAAS,qBAAA,EAAuB;AAC7D,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,CAAA,0BAAA,EAA6B,UAAU,CAAA,qBAAA,EAAwB,qBAAqB,CAAA,4DAAA,CAAA;AAAA,QAC7F,IAAA,EAAM,CAAC,OAAA,EAAS,IAAI;AAAA,OACrB,CAAA;AAAA,IACH;AAAA,EACF;AACA,EAAA,KAAA,MAAW,QAAQ,MAAA,CAAO,IAAA,CAAK,MAAM,OAAA,IAAW,EAAE,CAAA,EAAG;AAEnD,IAAA,MAAM,MAAA,GAAS,UAAU,IAAI,CAAA,CAAA;AAC7B,IAAA,IAAI,MAAA,CAAO,SAAS,qBAAA,EAAuB;AACzC,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,CAAA,8BAAA,EAAiC,MAAM,CAAA,qBAAA,EAAwB,qBAAqB,CAAA,qDAAA,CAAA;AAAA,QAC7F,IAAA,EAAM,CAAC,SAAA,EAAW,IAAI;AAAA,OACvB,CAAA;AAAA,IACH;AAAA,EACF;AACF;AAGA,IAAM,WAAA,GAA4G;AAAA,EAChH,OAAA,EAAS,SAAA;AAAA,EACT,MAAA,EAAQ,SAAA;AAAA,EACR,OAAA,EAAS,SAAA;AAAA,EACT,MAAA,EAAQ,SAAA;AAAA,EACR,IAAA,EAAM,MAAA;AAAA,EACN,IAAA,EAAM,MAAA;AAAA,EACN,IAAA,EAAM,UAAA;AAAA,EACN,WAAA,EAAa,UAAA;AAAA,EACb,OAAA,EAAS,SAAA;AAAA,EACT,KAAA,EAAO;AACT,CAAA;AAEO,IAAM,eAAA,GAAkB,CAAC,IAAA,KAA6B,WAAA,CAAY,IAAI,CAAA;AAE7E,SAAS,qBAAA,CAAsB,OAAkB,GAAA,EAAsB;AACrE,EAAA,IAAI,MAAM,MAAA,EAAQ;AAClB,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,IAAW,EAAC;AAClC,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AACvC,EAAA,KAAA,MAAW,IAAA,IAAQ,CAAC,MAAA,EAAQ,OAAO,CAAA,EAAY;AAC7C,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,QAAA,GAAW,IAAI,CAAA;AACvC,IAAA,IAAI,CAAC,SAAA,EAAW;AAChB,IAAA,KAAA,MAAW,MAAA,IAAU,iBAAA,CAAkB,SAAA,CAAU,GAAG,CAAA,EAAG;AACrD,MAAA,IAAI,CAAC,WAAA,CAAY,QAAA,CAAS,MAAM,CAAA,EAAG;AACjC,QAAA,GAAA,CAAI,QAAA,CAAS;AAAA,UACX,IAAA,EAAM,QAAA;AAAA,UACN,OAAA,EAAS,qCAAqC,MAAM,CAAA,CAAA,CAAA;AAAA,UACpD,IAAA,EAAM,CAAC,UAAA,EAAY,IAAI;AAAA,SACxB,CAAA;AAAA,MACH;AAAA,IACF;AACA,IAAA,aAAA,CAAc,SAAA,CAAU,GAAA,EAAK,CAAC,IAAA,KAAS;AACrC,MAAA,IAAI,IAAA,CAAK,SAAS,SAAA,EAAW;AAC7B,MAAA,MAAM,QAAQ,mBAAA,CAAoB,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,OAAO,OAAO,CAAA;AAChE,MAAA,IAAI,KAAA,EAAO,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,KAAA,EAAO,IAAA,EAAM,CAAC,UAAA,EAAY,IAAI,GAAG,CAAA;AAAA,IACtF,CAAC,CAAA;AAAA,EACH;AACF;AAOA,SAAS,mBAAA,CACP,IAAA,EACA,KAAA,EACA,OAAA,EACe;AACf,EAAA,MAAM,UAAU,CAAC,OAAA,KACf,OAAA,CAAQ,IAAA,KAAS,WAAY,OAAA,CAAQ,OAAA,CAAQ,IAAI,CAAA,GAAI,YAAY,OAAA,CAAQ,OAAA,CAAQ,IAAI,CAAA,CAAG,IAAI,IAAI,IAAA,GAAQ,IAAA;AAE1G,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,QAAA,IAAY,KAAA,CAAM,SAAS,QAAA,EAAU;AACrD,IAAA,MAAM,SAAA,GAAY,QAAQ,IAAI,CAAA;AAC9B,IAAA,MAAM,UAAA,GAAa,QAAQ,KAAK,CAAA;AAChC,IAAA,IAAI,SAAA,IAAa,UAAA,IAAc,SAAA,KAAc,UAAA,EAAY;AACvD,MAAA,OAAO,oBAAoB,IAAA,CAAK,IAAI,CAAA,GAAA,EAAM,OAAA,CAAQ,KAAK,IAAI,CAAA,CAAG,IAAI,CAAA,QAAA,EAAW,MAAM,IAAI,CAAA,GAAA,EAAM,QAAQ,KAAA,CAAM,IAAI,EAAG,IAAI,CAAA,2BAAA,CAAA;AAAA,IACxH;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAA,GAAS,KAAK,IAAA,KAAS,QAAA,GAAW,OAAO,KAAA,CAAM,IAAA,KAAS,WAAW,KAAA,GAAQ,IAAA;AACjF,EAAA,MAAM,OAAA,GAAU,KAAK,IAAA,KAAS,SAAA,GAAY,OAAO,KAAA,CAAM,IAAA,KAAS,YAAY,KAAA,GAAQ,IAAA;AACpF,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,WAAW,OAAA,CAAQ,KAAA,KAAU,MAAM,OAAO,IAAA;AAC1D,EAAA,MAAM,WAAA,GAAc,QAAQ,MAAM,CAAA;AAClC,EAAA,IAAI,CAAC,aAAa,OAAO,IAAA;AAKzB,EAAA,IAAI,OAAO,OAAA,CAAQ,KAAA,KAAU,QAAA,EAAU,OAAO,IAAA;AAC9C,EAAA,MAAM,YAAA,GAAe,OAAO,OAAA,CAAQ,KAAA,KAAU,WAAW,SAAA,GAAY,SAAA;AACrE,EAAA,IAAI,iBAAiB,WAAA,EAAa;AAChC,IAAA,OAAO,CAAA,iBAAA,EAAoB,MAAA,CAAO,IAAI,CAAA,GAAA,EAAM,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAA,CAAG,IAAI,CAAA,SAAA,EAAY,OAAO,OAAA,CAAQ,KAAK,CAAA,kCAAA,CAAA;AAAA,EACxG;AACA,EAAA,OAAO,IAAA;AACT;;;ACrUO,IAAM,yBAAA,GAA4B,CAAC,QAAA,EAAU,QAAA,EAAU,UAAU,QAAQ,CAAA;AAMhF,IAAM,kBAAkB,CAAC,MAAA,EAAQ,QAAA,EAAU,QAAA,EAAU,UAAU,OAAO,CAAA;AAc/D,SAAS,mBAAmB,UAAA,EAA2C;AAC5E,EAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,aAAA,CAAc,UAAA,CAAW,SAAS,CAAC,CAAA;AAClE,EAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,gBAAA,CAAiB,UAAA,CAAW,SAAS,CAAC,CAAA;AACnE,EAAA,MAAM,MAAA,GAAS,aAAa,UAAU,CAAA;AAEtC,EAAA,MAAM,QAAQ,MAAA,CAAO,GAAA;AAAA,IACnB,CAAC,UAAU,CAAA,YAAA,EAAe,MAAM,IAAI,eAAA,CAAgB,KAAA,CAAM,KAAK,CAAC,CAAA,yBAAA;AAAA,GAClE;AACA,EAAA,MAAM,QAAA,GAAW,OAAO,OAAA,CAAQ,CAAC,UAAU,gBAAA,CAAiB,MAAA,EAAQ,KAAK,CAAC,CAAA;AAC1E,EAAA,MAAM,SAAS,MAAA,CAAO,GAAA;AAAA,IACpB,CAAC,KAAA,KACC,CAAA,MAAA,EAAS,yBAAA,CAA0B,KAAK,IAAI,CAAC,CAAA,IAAA,EAAO,MAAM,IAAI,eAAA,CAAgB,KAAA,CAAM,KAAK,CAAC,OAAO,IAAI,CAAA;AAAA,GACzG;AACA,EAAA,OAAO,CAAC,GAAG,KAAA,EAAO,GAAG,QAAA,EAAU,CAAA,sBAAA,EAAyB,MAAM,CAAA,IAAA,EAAO,IAAI,CAAA,CAAA,EAAI,GAAG,MAAM,CAAA;AACxF;AAOO,SAAS,oBAAA,CAAqB,YAAoB,MAAA,EAAqC;AAC5F,EAAA,MAAM,MAAA,GAAS,gBAAgB,UAAU,CAAA;AACzC,EAAA,OAAO,MAAA,CAAO,OAAA;AAAA,IAAQ,CAAC,UACrB,eAAA,CAAgB,GAAA;AAAA,MACd,CAAC,MAAA,KAAW,CAAA,sBAAA,EAAyB,eAAA,CAAgB,WAAiB,KAAA,EAAO,MAAM,CAAC,CAAC,CAAA,IAAA,EAAO,MAAM,CAAA,CAAA,EAAI,eAAA,CAAgB,KAAK,CAAC,CAAA;AAAA;AAC9H,GACF;AACF;AAEA,SAAS,gBAAA,CAAiB,QAAgB,KAAA,EAA4B;AACpE,EAAA,MAAM,YAAY,CAAA,EAAG,MAAM,IAAI,eAAA,CAAgB,KAAA,CAAM,KAAK,CAAC,CAAA,CAAA;AAC3D,EAAA,MAAMc,WAAAA,GAAa,CAAC,MAAA,KAAmB,eAAA,CAAgB,WAAiB,KAAA,CAAM,KAAA,EAAO,MAAM,CAAC,CAAA;AAC5F,EAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,GAAA,CAAI,CAAC,MAAA,KAAW,CAAA,sBAAA,EAAyBA,WAAAA,CAAW,MAAM,CAAC,CAAA,IAAA,EAAO,SAAS,CAAA,CAAE,CAAA;AAChH,EAAA,MAAM,cAAc,MAAA,CAAO,WAAA;AAAA,IACzB,OAAO,OAAA,CAAQ,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,MAAM,MAAM,CAAA,KAAM,CAAC,IAAA,EAAM,MAAA,CAAO,IAAI,CAAC;AAAA,GACjF;AAEA,EAAA,MAAM,IAAA,GAAO,MAAM,QAAA,EAAU,IAAA;AAC7B,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,UAAA,CAAW,IAAA,CAAK,CAAA,cAAA,EAAiBA,WAAAA,CAAW,MAAM,CAAC,CAAA,IAAA,EAAO,SAAS,CAAA,mBAAA,EAAsB,gBAAA,CAAiB,IAAA,CAAK,GAAA,EAAK,WAAW,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,EACrI;AACA,EAAA,MAAM,KAAA,GAAQ,MAAM,QAAA,EAAU,KAAA;AAC9B,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,MAAM,SAAA,GAAY,gBAAA,CAAiB,KAAA,CAAM,GAAA,EAAK,WAAW,CAAA;AACzD,IAAA,UAAA,CAAW,IAAA,CAAK,iBAAiBA,WAAAA,CAAW,QAAQ,CAAC,CAAA,IAAA,EAAO,SAAS,CAAA,wBAAA,EAA2B,SAAS,CAAA,CAAA,CAAG,CAAA;AAC5G,IAAA,UAAA,CAAW,IAAA;AAAA,MACT,CAAA,cAAA,EAAiBA,YAAW,QAAQ,CAAC,OAAO,SAAS,CAAA,mBAAA,EAAsB,SAAS,CAAA,cAAA,EAAiB,SAAS,CAAA,CAAA;AAAA,KAChH;AACA,IAAA,UAAA,CAAW,IAAA,CAAK,iBAAiBA,WAAAA,CAAW,QAAQ,CAAC,CAAA,IAAA,EAAO,SAAS,CAAA,mBAAA,EAAsB,SAAS,CAAA,CAAA,CAAG,CAAA;AAAA,EACzG;AACA,EAAA,OAAO,UAAA;AACT;AAEO,IAAM,YAAA,GAAe,CAAC,UAAA,KAC3B,UAAA,CAAW,MAAA,CAAO,OAAO,CAAC,KAAA,KAAU,CAAC,KAAA,CAAM,MAAM,CAAA;ACzDnD,IAAM,SAAA,GAAyD;AAAA,EAC7D,IAAA,EAAM,CAAC,IAAA,KAASC,WAAA,CAAK,IAAI,CAAA;AAAA,EACzB,IAAA,EAAM,CAAC,IAAA,KAASnB,WAAA,CAAK,IAAI,CAAA;AAAA,EACzB,OAAA,EAAS,CAAC,IAAA,KAASoB,cAAA,CAAQ,IAAI,CAAA;AAAA;AAAA;AAAA,EAG/B,MAAA,EAAQ,CAAC,IAAA,KAASC,aAAA,CAAO,MAAM,EAAE,IAAA,EAAM,UAAU,CAAA;AAAA,EACjD,OAAA,EAAS,CAAC,IAAA,KAASC,cAAA,CAAQ,IAAI,CAAA;AAAA,EAC/B,MAAA,EAAQ,CAAC,IAAA,KAASC,sBAAA,CAAgB,IAAI,CAAA;AAAA,EACtC,OAAA,EAAS,CAAC,IAAA,KAASC,cAAA,CAAQ,IAAI,CAAA;AAAA,EAC/B,WAAA,EAAa,CAAC,IAAA,KAASC,gBAAA,CAAU,MAAM,EAAE,YAAA,EAAc,MAAM,CAAA;AAAA,EAC7D,IAAA,EAAM,CAAC,IAAA,KAASC,WAAA,CAAK,IAAI,CAAA;AAAA,EACzB,KAAA,EAAO,CAAC,IAAA,KAASC,YAAA,CAAM,IAAI;AAC7B,CAAA;AAEO,SAAS,WAAA,CAAY,MAAc,UAAA,EAAuC;AAC/E,EAAA,IAAI,MAAA,GAAS,SAAA,CAAU,UAAA,CAAW,IAAI,EAAE,IAAI,CAAA;AAC5C,EAAA,IAAI,UAAA,CAAW,WAAA,EAAa,MAAA,GAAS,MAAA,CAAO,UAAA,EAAW;AACvD,EAAA,IAAI,UAAA,CAAW,aAAa,KAAA,IAAS,CAAC,WAAW,WAAA,EAAa,MAAA,GAAS,OAAO,OAAA,EAAQ;AACtF,EAAA,IAAI,WAAW,MAAA,IAAU,CAAC,WAAW,WAAA,EAAa,MAAA,GAAS,OAAO,MAAA,EAAO;AACzE,EAAA,IAAI,UAAA,CAAW,YAAY,MAAA,EAAW;AACpC,IAAA,MAAM,QAAQ,UAAA,CAAW,OAAA;AAGzB,IAAA,MAAA,GAAS,MAAA,CAAO,OAAA;AAAA,MACd,OAAO,KAAA,KAAU,QAAA,IAAY,iBAAA,CAAkB,KAAA,EAAO,UAAA,CAAW,IAAI,CAAA,GAAIX,cAAA,CAAI,GAAA,CAAI,KAAK,CAAA,GAAI;AAAA,KAC5F;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;;;AClCA,IAAM,iBAAA,GAAoB,SAAA;AAQnB,SAAS,qBAAqB,UAAA,EAAkD;AACrF,EAAA,MAAM,UAAA,GAAa,aAAA,CAAc,UAAA,CAAW,SAAS,CAAA;AACrD,EAAA,MAAM,MAAA,GAASY,gBAAS,UAAU,CAAA;AAClC,EAAA,MAAM,OAAA,GAAmC,EAAE,CAAC,iBAAiB,GAAG,MAAA,EAAO;AACvE,EAAA,MAAM,SAAoD,EAAC;AAC3D,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAqC;AAEvD,EAAA,KAAA,MAAW,KAAA,IAAS,mBAAA,CAAoB,YAAA,CAAa,UAAU,CAAC,CAAA,EAAG;AACjE,IAAA,MAAM,YAAA,GAAe,UAAA,CAAW,MAAA,EAAQ,KAAA,EAAO,KAAK,CAAA;AACpD,IAAA,KAAA,CAAM,GAAA,CAAI,KAAA,CAAM,KAAA,EAAO,YAAuC,CAAA;AAC9D,IAAA,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAA,GAAI,YAAA;AAGvB,IAAA,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,GAAI,YAAA;AAAA,EACxB;AACA,EAAA,OAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAW;AACvC;AAEA,SAAS,UAAA,CACP,MAAA,EACA,KAAA,EACA,KAAA,EACA;AACA,EAAA,MAAM,UAAU,MAAA,CAAO,WAAA;AAAA,IACrB,OAAO,OAAA,CAAQ,KAAA,CAAM,WAAW,EAAE,EAAE,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,MAAM,MAAM,CAAC,IAAA,EAAM,YAAY,IAAA,EAAM,MAAM,CAAC,CAAC;AAAA,GAC/F;AAEA,EAAA,MAAM,eAAe,MAAA,CAAO,KAAA,CAAM,MAAM,KAAA,EAAO,OAAA,EAAkB,CAAC,IAAA,KAAkC;AAAA,IAClG,GAAG,YAAA,CAAa,KAAA,EAAO,IAAI,CAAA;AAAA,IAC3B,GAAG,gBAAA,CAAiB,KAAA,EAAO,IAAA,EAAM,KAAK;AAAA,GACvC,CAAA;AAGD,EAAA,OAAO,aAAa,SAAA,EAAU;AAChC;AAEA,SAAS,YAAA,CAAa,OAAkB,IAAA,EAA+B;AACrE,EAAA,OAAA,CAAQ,MAAM,OAAA,IAAW,EAAC,EAAG,GAAA,CAAI,CAAC,UAAA,KAAe;AAC/C,IAAA,MAAM,IAAA,GAAO,SAAA,CAAU,KAAA,CAAM,KAAA,EAAO,UAAU,CAAA;AAC9C,IAAA,MAAM,UAAU,UAAA,CAAW,MAAA,GAASC,mBAAY,IAAI,CAAA,GAAIzB,aAAM,IAAI,CAAA;AAClE,IAAA,MAAM,OAAA,GAAU,WAAW,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW,IAAA,CAAK,MAAM,CAAC,CAAA;AAC/D,IAAA,OAAO,OAAA,CAAQ,EAAA,CAAG,GAAI,OAA+B,CAAA;AAAA,EACvD,CAAC,CAAA;AACH;AAEA,SAAS,gBAAA,CACP,KAAA,EACA,IAAA,EACA,KAAA,EACA;AACA,EAAA,OAAO,MAAA,CAAO,QAAQ,KAAA,CAAM,KAAA,IAAS,EAAE,CAAA,CACpC,OAAO,CAAC,GAAG,IAAI,CAAA,KAAM,KAAK,OAAO,CAAA,CACjC,IAAI,CAAC,CAAC,IAAA,EAAM,IAAI,CAAA,KAAM;AAGrB,IAAA,MAAM,MAAA,GAAS,KAAK,EAAA,KAAO,KAAA,CAAM,QAAQ,IAAA,GAAO,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA;AACjE,IAAA,MAAM,YAAA,GAAe,MAAA,IAAU,oBAAA,CAAqB,MAAM,CAAA;AAC1D,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,YAAA,EAAc;AAC5B,MAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,eAAA,EAAkB,IAAI,CAAA,MAAA,EAAS,MAAM,KAAK,CAAA,uBAAA,EAA0B,IAAA,CAAK,EAAE,CAAA,CAAA,CAAG,CAAA;AAAA,IAC7G;AACA,IAAA,OAAO0B,iBAAA,CAAW;AAAA,MAChB,IAAA,EAAM,cAAA,CAAe,KAAA,CAAM,KAAA,EAAO,IAAI,CAAA;AAAA,MACtC,OAAA,EAAS,CAAC,IAAA,CAAK,IAAA,CAAK,EAAE,CAAC,CAAA;AAAA,MACvB,cAAA,EAAgB,CAAC,YAAY;AAAA,KAC9B,CAAA;AAAA,EACH,CAAC,CAAA;AACL;AAEA,SAAS,qBAAqB,MAAA,EAA0C;AACtE,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,CAAE,MAAA;AAAA,IACpC,CAAC,KAAA,KAAU,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,YAAY,SAAA,IAAc;AAAA,GAC1E;AACA,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,CAAC,MAAA,KAAY,OAAgC,OAAO,CAAA;AAC1E;AAGA,SAAS,oBAAoB,MAAA,EAA2C;AACtE,EAAA,MAAM,SAAA,GAAY,IAAI,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,CAAC,KAAA,CAAM,KAAA,EAAO,KAAK,CAAC,CAAC,CAAA;AACrE,EAAA,MAAM,SAAsB,EAAC;AAC7B,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAY;AAE/B,EAAA,OAAO,SAAA,CAAU,OAAO,CAAA,EAAG;AACzB,IAAA,MAAM,QAAQ,CAAC,GAAG,SAAA,CAAU,MAAA,EAAQ,CAAA,CAAE,MAAA;AAAA,MAAO,CAAC,KAAA,KAC5C,eAAA,CAAgB,KAAK,CAAA,CAAE,MAAM,CAAC,MAAA,KAAW,MAAA,CAAO,GAAA,CAAI,MAAM,CAAA,IAAK,CAAC,SAAA,CAAU,GAAA,CAAI,MAAM,CAAC;AAAA,KACvF;AACA,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,mCAAA,EAAsC,CAAC,GAAG,SAAA,CAAU,IAAA,EAAM,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,IACvG;AACA,IAAA,KAAA,MAAW,SAAS,KAAA,EAAO;AACzB,MAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AACjB,MAAA,MAAA,CAAO,GAAA,CAAI,MAAM,KAAK,CAAA;AACtB,MAAA,SAAA,CAAU,MAAA,CAAO,MAAM,KAAK,CAAA;AAAA,IAC9B;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEA,IAAM,eAAA,GAAkB,CAAC,KAAA,KACvB,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,KAAA,IAAS,EAAE,CAAA,CAE5B,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,OAAA,IAAW,CAAC,oBAAA,CAAqB,IAAA,CAAK,EAAE,CAAA,IAAK,IAAA,CAAK,EAAA,KAAO,KAAA,CAAM,KAAK,CAAA,CAC1F,GAAA,CAAI,CAAC,IAAA,KAAS,KAAK,EAAE,CAAA;;;ACtGnB,SAAS,gBAAA,CAAiB,YAAiCC,WAAAA,EAAwC;AACxG,EAAA,MAAM,EAAE,OAAA,EAAS,UAAA,EAAW,GAAI,qBAAqB,UAAU,CAAA;AAC/D,EAAA,OAAOC,uBAAA,CAAoB,OAAA,EAASD,WAAAA,EAAY,CAAC,UAAU,CAAC,CAAA;AAC9D;AAEO,IAAM,aAAA,GAAgB,CAAC,SAAA,KAC5BC,uBAAA,CAAoB,EAAC,EAAG,MAAA,EAAW,CAAC,aAAA,CAAc,SAAS,CAAC,CAAC;AAE/D,IAAM,wBAAA,GAA4BA,uBAAA,CAAoB,EAAE,CAAA,CAA0B,OAAA;AAS3E,SAAS,kBAAkB,QAAA,EAAgD;AAChF,EAAA,MAAM,QAAA,GAAWC,iBAAa,QAAmC,CAAA;AACjE,EAAA,MAAM,UAAW,QAAA,CAAmC,OAAA;AACpD,EAAA,IAAI,YAAY,wBAAA,EAA0B;AACxC,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,iBAAA,EAAoB,MAAA,CAAO,OAAO,CAAC,qDAAqD,wBAAwB,CAAA,uCAAA;AAAA,KAClH;AAAA,EACF;AACA,EAAA,OAAO,QAAA;AACT;AAEO,SAAS,cAAA,CAAe,UAA6B,OAAA,EAA+C;AACzG,EAAA,qBAAA,CAAsB,UAAU,OAAO,CAAA;AACvC,EAAA,OAAOC,qBAAA,CAAkB,UAAmB,OAAgB,CAAA;AAC9D;AAUA,SAAS,qBAAA,CAAsB,UAA6B,OAAA,EAAkC;AAC5F,EAAA,MAAM,cAAA,GAAiB,SAAS,QAAQ,CAAA;AACxC,EAAA,MAAM,aAAA,GAAgB,SAAS,OAAO,CAAA;AAEtC,EAAA,MAAM,aAAA,GAAgB,CAAC,GAAG,cAAA,CAAe,MAAM,CAAA,CAAE,MAAA,CAAO,CAAC,IAAA,KAAS,CAAC,aAAA,CAAc,GAAA,CAAI,IAAI,CAAC,CAAA;AAC1F,EAAA,MAAM,WAAA,GAAc,CAAC,GAAG,aAAA,CAAc,MAAM,CAAA,CAAE,MAAA,CAAO,CAAC,IAAA,KAAS,CAAC,cAAA,CAAe,GAAA,CAAI,IAAI,CAAC,CAAA;AACxF,EAAA,IAAI,aAAA,CAAc,MAAA,GAAS,CAAA,IAAK,WAAA,CAAY,SAAS,CAAA,EAAG;AACtD,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,gCAAA,EAAmC,YAAY,IAAA,CAAK,IAAI,CAAC,CAAA,eAAA,EAAkB,aAAA,CAAc,IAAA,CAAK,IAAI,CAAC,CAAA,yEAAA;AAAA,KACrG;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,eAAe,CAAA,IAAK,cAAA,EAAgB;AACpD,IAAA,MAAM,cAAA,GAAiB,aAAA,CAAc,GAAA,CAAI,IAAI,CAAA;AAC7C,IAAA,IAAI,CAAC,cAAA,EAAgB;AACrB,IAAA,MAAM,OAAA,GAAU,CAAC,GAAG,eAAe,CAAA,CAAE,MAAA,CAAO,CAAC,MAAA,KAAW,CAAC,cAAA,CAAe,GAAA,CAAI,MAAM,CAAC,CAAA;AACnF,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,cAAc,CAAA,CAAE,MAAA,CAAO,CAAC,MAAA,KAAW,CAAC,eAAA,CAAgB,GAAA,CAAI,MAAM,CAAC,CAAA;AACjF,IAAA,IAAI,OAAA,CAAQ,MAAA,GAAS,CAAA,IAAK,KAAA,CAAM,SAAS,CAAA,EAAG;AAC1C,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,CAAA,mBAAA,EAAsB,IAAI,CAAA,oBAAA,EAAuB,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,eAAA,EAAkB,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,mHAAA;AAAA,OACvG;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,SAAS,QAAA,EAAuD;AACvE,EAAA,MAAM,MAAA,GAAU,QAAA,CAAwD,MAAA,IAAU,EAAC;AACnF,EAAA,OAAO,IAAI,GAAA;AAAA,IACT,MAAA,CAAO,OAAO,MAAM,CAAA,CAAE,IAAI,CAAC,KAAA,KAAU,CAAC,CAAA,EAAG,KAAA,CAAM,MAAM,IAAI,KAAA,CAAM,IAAI,CAAA,CAAA,EAAI,IAAI,GAAA,CAAI,MAAA,CAAO,KAAK,KAAA,CAAM,OAAO,CAAC,CAAC,CAAC;AAAA,GAC7G;AACF;AAeO,SAAS,mBAAA,CAAoB,UAA6B,UAAA,EAAiD;AAChH,EAAA,MAAM,QAAA,GAAW,gBAAgB,QAAQ,CAAA;AACzC,EAAA,MAAM,aAAuB,EAAC;AAC9B,EAAA,MAAM,UAAA,GAAa,aAAA,CAAc,UAAA,CAAW,SAAS,CAAA;AACrD,EAAA,MAAM,SAAA,GAAY,CAAC,KAAA,KAAkB,CAAA,EAAG,eAAA,CAAgB,UAAU,CAAC,CAAA,CAAA,EAAI,eAAA,CAAgB,KAAK,CAAC,CAAA,CAAA;AAE7F,EAAA,KAAA,MAAW,KAAA,IAAS,YAAA,CAAa,UAAU,CAAA,EAAG;AAC5C,IAAA,MAAM,aAAA,GAAgB,SAAA,CAAU,QAAA,EAAU,UAAA,EAAY,MAAM,KAAK,CAAA;AACjE,IAAA,IAAI,CAAC,aAAA,EAAe;AAEpB,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,MAAM,CAAA,IAAK,MAAA,CAAO,QAAQ,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA,EAAG;AAChE,MAAA,IAAI,OAAO,YAAA,EAAc;AACvB,QAAA,MAAM,cAAA,GAAiB,aAAA,CAAc,OAAA,CAAQ,MAAA,CAAO,YAAY,CAAA;AAChE,QAAA,IAAI,cAAA,IAAkB,aAAA,CAAc,OAAA,CAAQ,IAAI,CAAA,EAAG;AAIjD,UAAA,MAAM,IAAI,kBAAA;AAAA,YACR,IAAI,KAAA,CAAM,KAAK,IAAI,IAAI,CAAA,yBAAA,EAA4B,OAAO,YAAY,CAAA,+FAAA;AAAA,WACxE;AAAA,QACF;AACA,QAAA,IAAI,cAAA,EAAgB;AAClB,UAAA,UAAA,CAAW,IAAA;AAAA,YACT,CAAA,YAAA,EAAe,SAAA,CAAU,KAAA,CAAM,KAAK,CAAC,CAAA,eAAA,EAAkB,eAAA,CAAgB,MAAA,CAAO,YAAY,CAAC,CAAA,IAAA,EAAO,eAAA,CAAgB,IAAI,CAAC,CAAA;AAAA,WACzH;AACA,UAAA,OAAO,aAAA,CAAc,OAAA,CAAQ,MAAA,CAAO,YAAY,CAAA;AAChD,UAAA,aAAA,CAAc,QAAQ,IAAI,CAAA,GAAI,EAAE,GAAG,gBAAgB,IAAA,EAAK;AAAA,QAC1D,CAAA,MAAA,IAAW,CAAC,aAAA,CAAc,OAAA,CAAQ,IAAI,CAAA,EAAG;AAKvC,UAAA,MAAM,IAAI,kBAAA;AAAA,YACR,IAAI,KAAA,CAAM,KAAK,IAAI,IAAI,CAAA,yBAAA,EAA4B,OAAO,YAAY,CAAA,mFAAA;AAAA,WACxE;AAAA,QACF;AAAA,MACF;AAEA,MAAA,MAAM,OAAO,MAAA,CAAO,IAAA,GAAO,SAAA,CAAU,MAAA,CAAO,IAAI,CAAA,GAAI,IAAA;AACpD,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,MAAM,OAAA,GAAU,aAAA,CAAc,OAAA,CAAQ,IAAI,CAAA;AAC1C,QAAA,MAAM,UAAA,GAAa,WAAA,CAAY,MAAA,CAAO,IAAI,CAAA;AAC1C,QAAA,IAAI,OAAA,IAAW,OAAA,CAAQ,IAAA,KAAS,UAAA,EAAY;AAC1C,UAAA,UAAA,CAAW,IAAA;AAAA,YACT,eAAe,SAAA,CAAU,KAAA,CAAM,KAAK,CAAC,iBAAiB,eAAA,CAAgB,IAAI,CAAC,CAAA,MAAA,EAAS,UAAU,CAAA,OAAA,EAAU,eAAA,CAAgB,IAAI,CAAC,KAAK,UAAU,CAAA;AAAA,WAC9I;AACA,UAAA,OAAA,CAAQ,IAAA,GAAO,UAAA;AAAA,QACjB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,EAAE,YAAY,QAAA,EAAS;AAChC;AAEA,SAAS,SAAA,CAAU,QAAA,EAA6B,MAAA,EAAgB,KAAA,EAA0C;AACxG,EAAA,MAAM,MAAA,GAAU,QAAA,CAAwD,MAAA,IAAU,EAAC;AACnF,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,CAAE,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,MAAA,KAAW,MAAA,IAAU,KAAA,CAAM,IAAA,KAAS,KAAK,CAAA;AAC9F;AAGO,SAAS,kBAAA,CAAmB,UAA6B,MAAA,EAA0B;AACxF,EAAA,MAAM,MAAA,GAAU,QAAA,CAAwD,MAAA,IAAU,EAAC;AACnF,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,CACxB,OAAO,CAAC,KAAA,KAAU,KAAA,CAAM,MAAA,KAAW,MAAM,CAAA,CACzC,GAAA,CAAI,CAAC,KAAA,KAAU,MAAM,IAAI,CAAA;AAC9B;AChKA,IAAM,kBAAkB,IAAI,MAAA;AAAA,EAC1B;AAAA,IACE,MAAA,CAAO,GAAA,CAAA,4BAAA,CAAA;AAAA,IACP,MAAA,CAAO,GAAA,CAAA,oBAAA,CAAA;AAAA,IACP,MAAA,CAAO,GAAA,CAAA,gCAAA,CAAA;AAAA,IACP,MAAA,CAAO,GAAA,CAAA,4CAAA,CAAA;AAAA;AAAA;AAAA,IAGP,MAAA,CAAO,GAAA,CAAA,sBAAA;AAAA,GACT,CAAE,KAAK,GAAG,CAAA;AAAA,EACV;AACF,CAAA;AAQO,SAAS,iBAAiB,SAAA,EAA4B;AAC3D,EAAA,OAAO,eAAA,CAAgB,KAAK,SAAS,CAAA;AACvC;AASA,eAAsB,oBAAA,CAAqB;AAAA,EACzC,UAAA;AAAA,EACA;AACF,CAAA,EAIsB;AACpB,EAAA,MAAM,EAAE,OAAA,EAAS,UAAA,EAAW,GAAI,qBAAqB,UAAU,CAAA;AAC/D,EAAA,MAAM,EAAE,mBAAA,EAAoB,GAAI,MAAM,aAAA;AAAA,IAAc,MAClDC,eAAW,OAAA,EAAS,WAAA,CAAY,EAAE,CAAA,EAAY,CAAC,UAAU,CAAC;AAAA,GAC5D;AACA,EAAA,OAAO,mBAAA,CAAoB,OAAO,CAAC,SAAA,KAAc,CAAC,eAAA,CAAgB,IAAA,CAAK,SAAS,CAAC,CAAA;AACnF;AAYA,SAAS,YAAY,EAAA,EAAsE;AACzF,EAAA,MAAM,OAAA,GAAW,EAAA,CAAyD,OAAA,CAAQ,IAAA,CAAK,EAAE,CAAA;AACzF,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,OAAO,KAAA,KAAU;AACxB,MAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,KAAK,CAAA;AAClC,MAAA,IAAI,UAAU,OAAO,MAAA,KAAW,QAAA,IAAY,MAAA,IAAU,QAAQ,OAAO,MAAA;AACrE,MAAA,OAAO,EAAE,MAAM,MAAA,EAAO;AAAA,IACxB;AAAA,GACF;AACF;AAcA,IAAI,cAAA,GAAmC,QAAQ,OAAA,EAAQ;AAEvD,SAAS,cAAiB,GAAA,EAAmC;AAC3D,EAAA,MAAM,OAAO,cAAA,CAAe,IAAA,CAAK,MAAM,UAAA,CAAW,GAAG,CAAC,CAAA;AAGtD,EAAA,cAAA,GAAiB,IAAA,CAAK,IAAA;AAAA,IACpB,MAAM,MAAA;AAAA,IACN,MAAM;AAAA,GACR;AACA,EAAA,OAAO,IAAA;AACT;AAEA,eAAe,WAAc,GAAA,EAAmC;AAC9D,EAAA,MAAM,eAAe,OAAA,CAAQ,IAAA;AAC7B,EAAA,OAAA,CAAQ,IAAA,IAAQ,CAAC,IAAA,KAAkB;AACjC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mCAAA,EAAsC,IAAA,IAAQ,CAAC,CAAA,iCAAA,CAAmC,CAAA;AAAA,EACpG,CAAA,CAAA;AACA,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,GAAA,EAAI;AAAA,EACnB,CAAA,SAAE;AACA,IAAA,OAAA,CAAQ,IAAA,GAAO,YAAA;AAAA,EACjB;AACF;;;ACxGO,IAAM,eAAA,GAAkB,CAAC,MAAA,EAAQ,KAAA,EAAO,YAAY,UAAU;AAwBrE,eAAsB,aAAA,CAAc;AAAA,EAClC,UAAA;AAAA,EACA;AACF,CAAA,EAG8B;AAC5B,EAAA,MAAM,MAAA,GAAS,aAAA,CAAc,UAAA,CAAW,SAAS,CAAA;AAGjD,EAAA,MAAM,WAAW,gBAAA,GAAmB,iBAAA,CAAkB,gBAAgB,CAAA,GAAI,aAAA,CAAc,WAAW,SAAS,CAAA;AAC5G,EAAA,MAAM,KAAA,GAAQ,mBAAA,CAAoB,QAAA,EAAU,UAAU,CAAA;AACtD,EAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,UAAA,EAAY,UAAA,CAAW,QAAQ,CAAC,CAAA;AAClE,EAAA,MAAM,GAAA,GAAM,MAAM,cAAA,CAAe,KAAA,CAAM,UAAU,QAAQ,CAAA;AAGzD,EAAA,MAAM,cAAc,oBAAA,CAAqB,MAAA,EAAQ,kBAAA,CAAmB,QAAA,EAAU,MAAM,CAAC,CAAA;AAErF,EAAA,MAAM,UAAA,GAAkC;AAAA,IACtC,GAAG,WAAA,CAAY,GAAA,CAAI,CAACnB,IAAAA,MAAS,EAAE,IAAA,EAAM,UAAA,EAAqB,GAAA,EAAAA,IAAAA,EAAI,CAAE,CAAA;AAAA,IAChE,GAAG,KAAA,CAAM,UAAA,CAAW,GAAA,CAAI,CAACA,IAAAA,MAAS,EAAE,IAAA,EAAM,MAAA,EAAiB,GAAA,EAAAA,IAAAA,EAAI,CAAE,CAAA;AAAA,IACjE,GAAG,GAAA,CAAI,GAAA,CAAI,CAACA,UAAS,EAAE,IAAA,EAAM,KAAA,EAAgB,GAAA,EAAKA,IAAAA,CAAI,OAAA,CAAQ,OAAA,EAAS,EAAE,GAAE,CAAE,CAAA;AAAA,IAC7E,GAAG,kBAAA,CAAmB,UAAU,CAAA,CAAE,GAAA,CAAI,CAACA,IAAAA,MAAS,EAAE,IAAA,EAAM,UAAA,EAAqB,GAAA,EAAAA,IAAAA,EAAI,CAAE,CAAA;AAAA;AAAA;AAAA;AAAA,IAInF,GAAG,mBAAA,CAAoB,UAAU,CAAA,CAAE,GAAA,CAAI,CAACA,IAAAA,MAAS,EAAE,IAAA,EAAM,UAAA,EAAqB,GAAA,EAAAA,IAAAA,EAAI,CAAE,CAAA;AAAA,IACpF,GAAG,wBAAA,CAAyB,UAAU,CAAA,CAAE,GAAA,CAAI,CAACA,IAAAA,MAAS,EAAE,IAAA,EAAM,UAAA,EAAqB,GAAA,EAAAA,IAAAA,EAAI,CAAE;AAAA,GAC3F;AACA,EAAA,OAAO,EAAE,SAAA,EAAW,UAAA,CAAW,SAAA,EAAW,MAAA,EAAQ,YAAY,QAAA,EAAS;AACzE;AAGO,IAAM,mBAAmB,CAAC,UAAA,KAC/B,aAAA,CAAc,EAAE,YAAY;AAE9B,IAAM,UAAA,GAAa,CAAC,QAAA,KACjB,QAAA,CAA6B,EAAA;ACPhC,IAAMoB,UAAAA,GAAyD;AAAA,EAC7D,IAAA,EAAM,CAAC,IAAA,KAASjB,WAAAA,CAAK,IAAI,CAAA;AAAA,EACzB,IAAA,EAAM,CAAC,IAAA,KAASnB,WAAAA,CAAK,IAAI,CAAA;AAAA,EACzB,OAAA,EAAS,CAAC,IAAA,KAASoB,cAAAA,CAAQ,IAAI,CAAA;AAAA;AAAA;AAAA,EAG/B,MAAA,EAAQ,CAAC,IAAA,KAASC,aAAAA,CAAO,MAAM,EAAE,IAAA,EAAM,UAAU,CAAA;AAAA,EACjD,OAAA,EAAS,CAAC,IAAA,KAASC,cAAAA,CAAQ,IAAI,CAAA;AAAA,EAC/B,MAAA,EAAQ,CAAC,IAAA,KAASC,sBAAAA,CAAgB,IAAI,CAAA;AAAA,EACtC,OAAA,EAAS,CAAC,IAAA,KAASC,cAAAA,CAAQ,IAAI,CAAA;AAAA,EAC/B,WAAA,EAAa,CAAC,IAAA,KAASC,gBAAAA,CAAU,MAAM,EAAE,YAAA,EAAc,MAAM,CAAA;AAAA,EAC7D,IAAA,EAAM,CAAC,IAAA,KAASC,WAAAA,CAAK,IAAI,CAAA;AAAA,EACzB,KAAA,EAAO,CAAC,IAAA,KAASC,YAAAA,CAAM,IAAI;AAC7B,CAAA;AAGA,IAAMU,kBAAAA,GAAoB,SAAA;AAC1B,IAAM,aAAA,GAAgB,CAAC,IAAA,KAAyB,CAAA,MAAA,EAAS,IAAI,CAAA,CAAA;AAK7D,IAAM,cAAA,GAAiB,CAAC,UAAA,KACtB,UAAA,CAAW,MAAA,CAAO,OAAO,CAAC,KAAA,KAAU,CAAC,KAAA,CAAM,MAAM,CAAA;AAM5C,SAAS,uBAAuB,UAAA,EAAkD;AACvF,EAAA,MAAM,UAAA,GAAa,aAAA,CAAc,UAAA,CAAW,SAAS,CAAA;AACrD,EAAA,MAAM,MAAA,GAAST,gBAAS,UAAU,CAAA;AAClC,EAAA,MAAM,OAAA,GAAmC,EAAE,CAACS,kBAAiB,GAAG,MAAA,EAAO;AACvE,EAAA,MAAM,SAAoD,EAAC;AAC3D,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAqC;AAEvD,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAuB;AACzC,EAAA,KAAA,MAAW,cAAA,IAAkB,WAAW,KAAA,EAAO;AAE7C,IAAA,MAAM,SAAS,cAAA,CAAe,MAAA;AAC9B,IAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAA,CAAK,cAAA,CAAe,MAAM,MAAM,CAAA;AACzD,IAAA,KAAA,CAAM,GAAA,CAAI,cAAA,CAAe,IAAA,EAAM,SAAiC,CAAA;AAChE,IAAA,OAAA,CAAQ,aAAA,CAAc,cAAA,CAAe,IAAI,CAAC,CAAA,GAAI,SAAA;AAAA,EAChD;AAEA,EAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,UAAA,CAAW,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,CAAC,KAAA,CAAM,KAAA,EAAO,KAAK,CAAC,CAAC,CAAA;AAC7E,EAAA,KAAA,MAAW,KAAA,IAASC,oBAAAA,CAAoB,cAAA,CAAe,UAAU,CAAC,CAAA,EAAG;AACnE,IAAA,MAAM,eAAeC,WAAAA,CAAW,MAAA,EAAQ,KAAA,EAAO,KAAA,EAAO,OAAO,MAAM,CAAA;AACnE,IAAA,KAAA,CAAM,GAAA,CAAI,KAAA,CAAM,KAAA,EAAO,YAAuC,CAAA;AAC9D,IAAA,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAA,GAAI,YAAA;AAGvB,IAAA,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,GAAI,YAAA;AAAA,EACxB;AACA,EAAA,OAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAW;AACvC;AAGO,SAAS,kBAAA,CAAmB,YAAiCR,WAAAA,EAAwC;AAC1G,EAAA,MAAM,EAAE,OAAA,EAAS,UAAA,EAAW,GAAI,uBAAuB,UAAU,CAAA;AACjE,EAAA,OAAOC,uBAAAA,CAAoB,OAAA,EAASD,WAAAA,EAAY,CAAC,UAAU,CAAC,CAAA;AAC9D;AAEA,SAASQ,WAAAA,CACP,MAAA,EACA,KAAA,EACA,KAAA,EACA,OACA,MAAA,EACA;AACA,EAAA,MAAM,iBAAA,GAAoB,KAAA,CAAM,UAAA,IAAc,EAAC;AAC/C,EAAA,IAAI,iBAAA,CAAkB,WAAW,CAAA,EAAG;AAClC,IAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,OAAA,EAAU,KAAA,CAAM,KAAK,CAAA,wBAAA,CAA0B,CAAA;AAAA,EAC9E;AACA,EAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAC,MAAA,KAAW,MAAA,CAAO,UAAU,CAAC,CAAA;AAC5E,EAAA,KAAA,MAAW,QAAQ,iBAAA,EAAmB;AACpC,IAAA,IAAI,CAAC,WAAA,CAAY,GAAA,CAAI,IAAI,CAAA,EAAG;AAC1B,MAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,eAAA,EAAkB,MAAM,KAAK,CAAA,6BAAA,EAAgC,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,IACnG;AAAA,EACF;AACA,EAAA,MAAM,mBAAmB,iBAAA,CAAkB,MAAA,KAAW,CAAA,GAAI,iBAAA,CAAkB,CAAC,CAAA,GAAI,MAAA;AACjF,EAAA,MAAM,mBAAmB,IAAI,GAAA,CAAI,qBAAqB,MAAA,GAAY,iBAAA,GAAoB,EAAE,CAAA;AAExF,EAAA,MAAM,UAAU,MAAA,CAAO,WAAA;AAAA,IACrB,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW;AAAA,MAC5B,MAAA,CAAO,UAAA;AAAA,MACP,aAAA,CAAc,EAAE,KAAA,EAAO,KAAA,CAAM,OAAO,MAAA,EAAQ,gBAAA,EAAkB,gBAAA,EAAkB,KAAA,EAAO;AAAA,KACxF;AAAA,GACH;AAEA,EAAA,MAAM,eAAe,MAAA,CAAO,KAAA,CAAM,MAAM,KAAA,EAAO,OAAA,EAAkB,CAAC,IAAA,KAAkC;AAAA,IAClG,GAAG,wBAAA,CAAyB,KAAA,EAAO,iBAAA,EAAmB,IAAI,CAAA;AAAA,IAC1D,GAAGC,aAAAA,CAAa,KAAA,EAAO,IAAI,CAAA;AAAA,IAC3B,GAAGC,iBAAAA,CAAiB,KAAA,EAAO,IAAA,EAAM,OAAO,MAAM;AAAA,GAC/C,CAAA;AAGD,EAAA,OAAO,aAAa,SAAA,EAAU;AAChC;AAEA,SAAS,oBAAA,CACP,KAAA,EACA,MAAA,EACA,KAAA,EACe;AACf,EAAA,IAAI,OAAO,MAAA,CAAO,IAAA,KAAS,UAAU,OAAOL,UAAAA,CAAU,OAAO,IAAI,CAAA;AACjE,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,GAAA,CAAI,MAAA,CAAO,KAAK,IAAI,CAAA;AAC9C,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,QAAA,EAAW,KAAK,CAAA,CAAA,EAAI,MAAA,CAAO,UAAU,CAAA,8BAAA,EAAiC,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,EACxH;AACA,EAAA,OAAO,WAAA;AACT;AAEA,SAAS,aAAA,CAAc;AAAA,EACrB,KAAA;AAAA,EACA,MAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAA,EAMY;AACV,EAAA,MAAM,OAAA,GAAU,oBAAA,CAAqB,KAAA,EAAO,MAAA,EAAQ,KAAK,CAAA;AAEzD,EAAA,IAAI,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,UAAU,CAAA;AACvC,EAAA,MAAM,kBAAA,GAAqB,OAAO,UAAA,KAAe,gBAAA;AACjD,EAAA,IAAI,kBAAA,EAAoB,OAAA,GAAU,OAAA,CAAQ,UAAA,EAAW;AAIrD,EAAA,IAAA,CAAK,MAAA,CAAO,aAAa,KAAA,IAAS,gBAAA,CAAiB,IAAI,MAAA,CAAO,UAAU,CAAA,KAAM,CAAC,kBAAA,EAAoB;AACjG,IAAA,OAAA,GAAU,QAAQ,OAAA,EAAQ;AAAA,EAC5B;AACA,EAAA,IAAI,OAAO,MAAA,IAAU,CAAC,kBAAA,EAAoB,OAAA,GAAU,QAAQ,MAAA,EAAO;AAEnE,EAAA,IAAI,MAAA,CAAO,SAAA,KAAc,MAAA,IAAa,MAAA,CAAO,YAAY,MAAA,EAAW;AAClE,IAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,QAAA,EAAW,KAAK,CAAA,CAAA,EAAI,MAAA,CAAO,UAAU,CAAA,qCAAA,CAAuC,CAAA;AAAA,EAC3G;AACA,EAAA,IAAI,MAAA,CAAO,cAAc,MAAA,EAAW;AAKlC,IAAA,IAAI,OAAO,MAAA,CAAO,IAAA,KAAS,QAAA,IAAY,CAAC,kBAAkB,MAAA,CAAO,SAAA,EAAW,MAAA,CAAO,IAAI,CAAA,EAAG;AACxF,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,WAAW,KAAK,CAAA,CAAA,EAAI,OAAO,UAAU,CAAA,sBAAA,EAAyB,OAAO,SAAS,CAAA,+BAAA;AAAA,OAChF;AAAA,IACF;AACA,IAAA,OAAA,GAAU,QAAQ,OAAA,CAAQpB,cAAAA,CAAI,GAAA,CAAI,MAAA,CAAO,SAAS,CAAC,CAAA;AAAA,EACrD,WAAW,MAAA,CAAO,OAAA,KAAY,MAAA,IAAa,MAAA,CAAO,YAAY,IAAA,EAAM;AAIlE,IAAA,OAAA,GAAU,OAAA,CAAQ,OAAA,CAAQ,MAAA,CAAO,OAAO,CAAA;AAAA,EAC1C;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,wBAAA,CAAyB,KAAA,EAAuB,iBAAA,EAAsC,IAAA,EAA+B;AAC5H,EAAA,IAAI,iBAAA,CAAkB,MAAA,GAAS,CAAA,EAAG,OAAO,EAAC;AAG1C,EAAA,OAAO;AAAA,IACL0B,iBAAA,CAAW;AAAA,MACT,IAAA,EAAM,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA,KAAA,CAAA;AAAA,MACpB,SAAS,iBAAA,CAAkB,GAAA,CAAI,CAAC,MAAA,KAAW,IAAA,CAAK,MAAM,CAAC;AAAA,KACxD;AAAA,GACH;AACF;AAEA,SAASF,aAAAA,CAAa,OAAuB,IAAA,EAA+B;AAC1E,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,UAAA,KAAe;AACvC,IAAA,KAAA,MAAW,MAAA,IAAU,WAAW,OAAA,EAAS;AACvC,MAAA,IAAI,EAAE,UAAU,IAAA,CAAA,EAAO;AACrB,QAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,UAAA,EAAa,MAAM,KAAK,CAAA,6BAAA,EAAgC,MAAM,CAAA,CAAA,CAAG,CAAA;AAAA,MAChG;AAAA,IACF;AACA,IAAA,MAAM,IAAA,GAAO,SAAA,CAAU,KAAA,CAAM,KAAA,EAAO,UAAU,CAAA;AAC9C,IAAA,MAAM,UAAU,UAAA,CAAW,MAAA,GAASX,mBAAY,IAAI,CAAA,GAAIzB,aAAM,IAAI,CAAA;AAClE,IAAA,MAAM,OAAA,GAAU,WAAW,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW,IAAA,CAAK,MAAM,CAAC,CAAA;AAC/D,IAAA,OAAO,OAAA,CAAQ,EAAA,CAAG,GAAI,OAA+B,CAAA;AAAA,EACvD,CAAC,CAAA;AACH;AAEA,SAASqC,iBAAAA,CACP,KAAA,EACA,IAAA,EACA,KAAA,EACA,MAAA,EACA;AACA,EAAA,OAAO,KAAA,CAAM,KAAA,CACV,MAAA,CAAO,CAAC,IAAA,KAAS,KAAK,OAAO,CAAA,CAC7B,GAAA,CAAI,CAAC,IAAA,KAAS;AACb,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,OAAA,IAAW,CAAC,KAAK,MAAA,EAAQ;AACzC,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,CAAA,eAAA,EAAkB,IAAA,CAAK,IAAI,CAAA,MAAA,EAAS,MAAM,KAAK,CAAA,oDAAA;AAAA,OACjD;AAAA,IACF;AAGA,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,MAAM,CAAA;AAC1C,IAAA,MAAM,MAAA,GAAS,KAAK,MAAA,KAAW,KAAA,CAAM,QAAQ,IAAA,GAAO,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,MAAM,CAAA;AACzE,IAAA,IAAI,CAAC,WAAA,IAAe,CAAC,MAAA,EAAQ;AAC3B,MAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,eAAA,EAAkB,IAAA,CAAK,IAAI,CAAA,MAAA,EAAS,KAAA,CAAM,KAAK,CAAA,uBAAA,EAA0B,IAAA,CAAK,MAAM,CAAA,CAAA,CAAG,CAAA;AAAA,IACtH;AACA,IAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,UAAA,IAAc,kBAAA,CAAmB,WAAW,CAAA;AAC1E,IAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,CAAA,eAAA,EAAkB,KAAK,IAAI,CAAA,MAAA,EAAS,MAAM,KAAK,CAAA,WAAA,EAAc,KAAK,MAAM,CAAA,4DAAA;AAAA,OAC1E;AAAA,IACF;AACA,IAAA,MAAM,YAAA,GAAe,OAAO,gBAAgB,CAAA;AAC5C,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,IAAA,CAAK,EAAE,CAAA;AACjC,IAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,YAAA,EAAc;AAClC,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,CAAA,eAAA,EAAkB,IAAA,CAAK,IAAI,CAAA,MAAA,EAAS,KAAA,CAAM,KAAK,CAAA,6BAAA,EAAgC,YAAA,GAAe,IAAA,CAAK,EAAA,GAAK,gBAAgB,CAAA,CAAA;AAAA,OAC1H;AAAA,IACF;AACA,IAAA,OAAOX,iBAAAA,CAAW;AAAA,MAChB,IAAA,EAAM,cAAA,CAAe,KAAA,CAAM,KAAA,EAAO,KAAK,IAAI,CAAA;AAAA,MAC3C,OAAA,EAAS,CAAC,YAAY,CAAA;AAAA,MACtB,cAAA,EAAgB,CAAC,YAAY;AAAA,KAC9B,CAAA;AAAA,EACH,CAAC,CAAA;AACL;AAEA,IAAM,kBAAA,GAAqB,CAAC,KAAA,KAC1B,KAAA,CAAM,UAAA,EAAY,WAAW,CAAA,GAAI,KAAA,CAAM,UAAA,CAAW,CAAC,CAAA,GAAI,MAAA;AAGzD,SAASQ,qBAAoB,MAAA,EAAqD;AAChF,EAAA,MAAM,SAAA,GAAY,IAAI,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,CAAC,KAAA,CAAM,KAAA,EAAO,KAAK,CAAC,CAAC,CAAA;AACrE,EAAA,MAAM,SAA2B,EAAC;AAClC,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAY;AAE/B,EAAA,OAAO,SAAA,CAAU,OAAO,CAAA,EAAG;AACzB,IAAA,MAAM,QAAQ,CAAC,GAAG,SAAA,CAAU,MAAA,EAAQ,CAAA,CAAE,MAAA;AAAA,MAAO,CAAC,KAAA,KAC5CK,gBAAAA,CAAgB,KAAK,CAAA,CAAE,MAAM,CAAC,MAAA,KAAW,MAAA,CAAO,GAAA,CAAI,MAAM,CAAA,IAAK,CAAC,SAAA,CAAU,GAAA,CAAI,MAAM,CAAC;AAAA,KACvF;AACA,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,mCAAA,EAAsC,CAAC,GAAG,SAAA,CAAU,IAAA,EAAM,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,IACvG;AACA,IAAA,KAAA,MAAW,SAAS,KAAA,EAAO;AACzB,MAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AACjB,MAAA,MAAA,CAAO,GAAA,CAAI,MAAM,KAAK,CAAA;AACtB,MAAA,SAAA,CAAU,MAAA,CAAO,MAAM,KAAK,CAAA;AAAA,IAC9B;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEA,IAAMA,gBAAAA,GAAkB,CAAC,KAAA,KACvB,KAAA,CAAM,KAAA,CAAM,OAAA;AAAA,EAAQ,CAAC,IAAA;AAAA;AAAA,IAEnB,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,MAAA,KAAW,MAAA,IAAa,IAAA,CAAK,MAAA,KAAW,KAAA,CAAM,KAAA,GAAQ,CAAC,IAAA,CAAK,MAAM,IAAI;AAAC;AAC9F,CAAA;AA+BK,SAAS,qBAAA,CAAsB,UAA6B,UAAA,EAAiD;AAClH,EAAA,MAAM,QAAA,GAAW,gBAAgB,QAAQ,CAAA;AACzC,EAAA,MAAM,aAAuB,EAAC;AAC9B,EAAA,MAAM,UAAA,GAAa,aAAA,CAAc,UAAA,CAAW,SAAS,CAAA;AACrD,EAAA,MAAM,SAAA,GAAY,CAAC,KAAA,KAAkB,CAAA,EAAG,eAAA,CAAgB,UAAU,CAAC,CAAA,CAAA,EAAI,eAAA,CAAgB,KAAK,CAAC,CAAA,CAAA;AAC7F,EAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,UAAA,CAAW,KAAA,CAAM,GAAA,CAAI,CAAC,KAAA,KAAU,CAAC,KAAA,CAAM,IAAA,EAAM,KAAK,CAAC,CAAC,CAAA;AAEhF,EAAA,KAAA,MAAW,KAAA,IAAS,cAAA,CAAe,UAAU,CAAA,EAAG;AAC9C,IAAA,IAAI,MAAM,WAAA,EAAa;AACrB,MAAA,gBAAA,CAAiB,EAAE,UAAU,UAAA,EAAY,KAAA,EAAO,aAAa,KAAA,CAAM,WAAA,EAAa,UAAA,EAAY,SAAA,EAAW,CAAA;AAAA,IACzG;AAEA,IAAA,MAAM,aAAA,GAAgBC,UAAAA,CAAU,QAAA,EAAU,UAAA,EAAY,MAAM,KAAK,CAAA;AACjE,IAAA,IAAI,CAAC,aAAA,EAAe;AAEpB,IAAA,KAAA,MAAW,MAAA,IAAU,MAAM,OAAA,EAAS;AAClC,MAAA,MAAM,OAAO,MAAA,CAAO,UAAA;AACpB,MAAA,IAAI,OAAO,WAAA,EAAa;AACtB,QAAA,MAAM,cAAA,GAAiB,aAAA,CAAc,OAAA,CAAQ,MAAA,CAAO,WAAW,CAAA;AAC/D,QAAA,IAAI,cAAA,IAAkB,aAAA,CAAc,OAAA,CAAQ,IAAI,CAAA,EAAG;AAIjD,UAAA,MAAM,IAAI,kBAAA;AAAA,YACR,IAAI,KAAA,CAAM,KAAK,IAAI,IAAI,CAAA,wBAAA,EAA2B,OAAO,WAAW,CAAA,+FAAA;AAAA,WACtE;AAAA,QACF;AACA,QAAA,IAAI,cAAA,EAAgB;AAClB,UAAA,UAAA,CAAW,IAAA;AAAA,YACT,CAAA,YAAA,EAAe,SAAA,CAAU,KAAA,CAAM,KAAK,CAAC,CAAA,eAAA,EAAkB,eAAA,CAAgB,MAAA,CAAO,WAAW,CAAC,CAAA,IAAA,EAAO,eAAA,CAAgB,IAAI,CAAC,CAAA;AAAA,WACxH;AACA,UAAA,OAAO,aAAA,CAAc,OAAA,CAAQ,MAAA,CAAO,WAAW,CAAA;AAC/C,UAAA,aAAA,CAAc,QAAQ,IAAI,CAAA,GAAI,EAAE,GAAG,gBAAgB,IAAA,EAAK;AAAA,QAC1D,CAAA,MAAA,IAAW,CAAC,aAAA,CAAc,OAAA,CAAQ,IAAI,CAAA,EAAG;AAKvC,UAAA,MAAM,IAAI,kBAAA;AAAA,YACR,IAAI,KAAA,CAAM,KAAK,IAAI,IAAI,CAAA,wBAAA,EAA2B,OAAO,WAAW,CAAA,mFAAA;AAAA,WACtE;AAAA,QACF;AAAA,MACF;AAEA,MAAA,MAAM,OAAO,MAAA,CAAO,IAAA,GAAO,SAAA,CAAU,MAAA,CAAO,IAAI,CAAA,GAAI,IAAA;AACpD,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,MAAM,OAAA,GAAU,aAAA,CAAc,OAAA,CAAQ,IAAI,CAAA;AAC1C,QAAA,MAAM,EAAE,cAAc,OAAA,EAAQ,GAAI,gBAAgB,MAAA,EAAQ,WAAA,EAAa,UAAA,EAAY,KAAA,CAAM,KAAK,CAAA;AAC9F,QAAA,IAAI,OAAA,IAAW,OAAA,CAAQ,IAAA,KAAS,YAAA,EAAc;AAC5C,UAAA,UAAA,CAAW,IAAA;AAAA,YACT,eAAe,SAAA,CAAU,KAAA,CAAM,KAAK,CAAC,iBAAiB,eAAA,CAAgB,IAAI,CAAC,CAAA,MAAA,EAAS,OAAO,CAAA,OAAA,EAAU,eAAA,CAAgB,IAAI,CAAC,KAAK,OAAO,CAAA;AAAA,WACxI;AACA,UAAA,OAAA,CAAQ,IAAA,GAAO,YAAA;AAAA,QACjB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,EAAE,YAAY,QAAA,EAAS;AAChC;AAOA,SAAS,eAAA,CACP,MAAA,EACA,KAAA,EACA,UAAA,EACA,KAAA,EAC2C;AAC3C,EAAA,IAAI,OAAO,MAAA,CAAO,IAAA,KAAS,QAAA,EAAU;AACnC,IAAA,MAAM,IAAA,GAAO,WAAA,CAAY,MAAA,CAAO,IAAI,CAAA;AACpC,IAAA,OAAO,EAAE,YAAA,EAAc,IAAA,EAAM,OAAA,EAAS,IAAA,EAAK;AAAA,EAC7C;AACA,EAAA,MAAM,QAAA,GAAW,OAAO,IAAA,CAAK,IAAA;AAC7B,EAAA,IAAI,CAAC,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA,EAAG;AACxB,IAAA,MAAM,IAAI,mBAAmB,CAAA,QAAA,EAAW,KAAK,IAAI,MAAA,CAAO,UAAU,CAAA,4BAAA,EAA+B,QAAQ,CAAA,CAAA,CAAG,CAAA;AAAA,EAC9G;AACA,EAAA,OAAO,EAAE,YAAA,EAAc,QAAA,EAAU,OAAA,EAAS,CAAA,EAAG,eAAA,CAAgB,UAAU,CAAC,CAAA,CAAA,EAAI,eAAA,CAAgB,QAAQ,CAAC,CAAA,CAAA,EAAG;AAC1G;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACxB,QAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAOS;AACP,EAAA,MAAM,MAAA,GAAU,QAAA,CAAwD,MAAA,IAAU,EAAC;AACnF,EAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CAAE,IAAA;AAAA,IAC3C,CAAC,GAAG,KAAK,MAAM,KAAA,CAAM,MAAA,KAAW,UAAA,IAAc,KAAA,CAAM,IAAA,KAAS;AAAA,GAC/D;AACA,EAAA,MAAM,YAAA,GAAeA,UAAAA,CAAU,QAAA,EAAU,UAAA,EAAY,MAAM,KAAK,CAAA;AAChE,EAAA,IAAI,iBAAiB,YAAA,EAAc;AACjC,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,CAAA,EAAI,KAAA,CAAM,KAAK,CAAA,wBAAA,EAA2B,WAAW,CAAA,6FAAA;AAAA,KACvD;AAAA,EACF;AACA,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,IAAI,YAAA,EAAc;AAClB,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,CAAA,EAAI,KAAA,CAAM,KAAK,CAAA,wBAAA,EAA2B,WAAW,CAAA,kFAAA;AAAA,KACvD;AAAA,EACF;AACA,EAAA,UAAA,CAAW,IAAA,CAAK,CAAA,YAAA,EAAe,SAAA,CAAU,WAAW,CAAC,cAAc,eAAA,CAAgB,KAAA,CAAM,KAAK,CAAC,CAAA,CAAE,CAAA;AACjG,EAAA,MAAM,CAAC,WAAA,EAAa,aAAa,CAAA,GAAI,aAAA;AACrC,EAAA,OAAO,OAAO,WAAW,CAAA;AACzB,EAAA,MAAA,CAAO,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,KAAA,CAAM,KAAK,CAAA,CAAE,CAAA,GAAI,EAAE,GAAG,aAAA,EAAe,IAAA,EAAM,KAAA,CAAM,KAAA,EAAM;AACjF;AAEA,SAASA,UAAAA,CAAU,QAAA,EAA6B,MAAA,EAAgB,KAAA,EAA0C;AACxG,EAAA,MAAM,MAAA,GAAU,QAAA,CAAwD,MAAA,IAAU,EAAC;AACnF,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,CAAE,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,MAAA,KAAW,MAAA,IAAU,KAAA,CAAM,IAAA,KAAS,KAAK,CAAA;AAC9F;AAiBA,eAAsB,eAAA,CAAgB;AAAA,EACpC,SAAA;AAAA,EACA;AACF,CAAA,EAG8B;AAC5B,EAAA,MAAM,MAAA,GAAS,aAAA,CAAc,SAAA,CAAU,SAAS,CAAA;AAGhD,EAAA,MAAM,WAAW,gBAAA,GAAmB,iBAAA,CAAkB,gBAAgB,CAAA,GAAI,aAAA,CAAc,UAAU,SAAS,CAAA;AAC3G,EAAA,MAAM,KAAA,GAAQ,qBAAA,CAAsB,QAAA,EAAU,SAAS,CAAA;AACvD,EAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,SAAA,EAAWb,WAAAA,CAAW,QAAQ,CAAC,CAAA;AACnE,EAAA,MAAM,GAAA,GAAM,MAAM,cAAA,CAAe,KAAA,CAAM,UAAU,QAAQ,CAAA;AAEzD,EAAA,MAAM,UAAA,GAAkC;AAAA,IACtC,GAAG,KAAA,CAAM,UAAA,CAAW,GAAA,CAAI,CAAC,SAAA,MAAe,EAAE,IAAA,EAAM,MAAA,EAAiB,GAAA,EAAK,SAAA,EAAU,CAAE,CAAA;AAAA,IAClF,GAAG,GAAA,CAAI,GAAA,CAAI,CAAC,eAAe,EAAE,IAAA,EAAM,KAAA,EAAgB,GAAA,EAAK,SAAA,CAAU,OAAA,CAAQ,OAAA,EAAS,EAAE,GAAE,CAAE;AAAA,GAC3F;AACA,EAAA,OAAO,EAAE,SAAA,EAAW,SAAA,CAAU,SAAA,EAAW,MAAA,EAAQ,YAAY,QAAA,EAAS;AACxE;AAEA,IAAMA,WAAAA,GAAa,CAAC,QAAA,KAAqD,QAAA,CAA6B,EAAA;AC/e/F,IAAM,UAAA,GAAa;AAOnB,IAAM,eAAA,GAAkB;AAAA,EAC7B,GAAA,EAAK,QAAA;AAAA,EACL,GAAA,EAAK,SAAA;AAAA,EACL,KAAA,EAAO,UAAA;AAAA,EACP,YAAA,EAAc;AAChB;AAGA,IAAM,gBAAgB9B,KAAAA,CAAE,KAAA,CAAM,CAACA,KAAAA,CAAE,QAAO,EAAGA,KAAAA,CAAE,MAAA,EAAO,EAAGA,MAAE,OAAA,EAAQ,EAAGA,KAAAA,CAAE,IAAA,EAAM,CAAC,CAAA;AAEtE,IAAM,aAAA,GAAgBA,KAAAA,CAAE,kBAAA,CAAmB,MAAA,EAAQ;AAAA,EACxDA,MAAE,MAAA,CAAO,EAAE,MAAMA,KAAAA,CAAE,OAAA,CAAQ,SAAS,CAAA,EAAG,KAAA,EAAOA,MAAE,KAAA,CAAM,CAAC,eAAeA,KAAAA,CAAE,KAAA,CAAM,aAAa,CAAC,CAAC,GAAG,CAAA;AAAA,EAChGA,KAAAA,CAAE,MAAA,CAAO,EAAE,IAAA,EAAMA,KAAAA,CAAE,OAAA,CAAQ,UAAU,CAAA,EAAG,IAAA,EAAMA,KAAAA,CAAE,MAAA,EAAO,EAAG,CAAA;AAAA,EAC1DA,MAAE,MAAA,CAAO,EAAE,IAAA,EAAMA,KAAAA,CAAE,QAAQ,OAAO,CAAA,EAAG,GAAA,EAAKA,KAAAA,CAAE,KAAK,CAAC,KAAA,EAAO,KAAK,CAAC,GAAG;AACpE,CAAC;AAOM,IAAM,OAAA,GAAU;AAAA,EACrB,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,KAAA;AAAA,EAC7C,MAAA;AAAA,EAAQ,OAAA;AAAA,EAAS,QAAA;AAAA,EAAU,UAAA;AAAA,EAAY;AACzC;AAmBO,IAAM,eAAkCA,KAAAA,CAAE,IAAA;AAAA,EAAK,MACpDA,KAAAA,CAAE,kBAAA,CAAmB,MAAA,EAAQ;AAAA,IAC3BA,MAAE,MAAA,CAAO,EAAE,IAAA,EAAMA,KAAAA,CAAE,QAAQ,KAAK,CAAA,EAAG,QAAA,EAAUA,KAAAA,CAAE,MAAM,YAAY,CAAA,CAAE,GAAA,CAAI,CAAC,GAAG,CAAA;AAAA,IAC3EA,MAAE,MAAA,CAAO,EAAE,IAAA,EAAMA,KAAAA,CAAE,QAAQ,IAAI,CAAA,EAAG,QAAA,EAAUA,KAAAA,CAAE,MAAM,YAAY,CAAA,CAAE,GAAA,CAAI,CAAC,GAAG,CAAA;AAAA,IAC1EA,KAAAA,CAAE,MAAA,CAAO,EAAE,IAAA,EAAMA,KAAAA,CAAE,QAAQ,KAAK,CAAA,EAAG,OAAA,EAAS,YAAA,EAAc,CAAA;AAAA,IAC1DA,MAAE,MAAA,CAAO,EAAE,MAAMA,KAAAA,CAAE,OAAA,CAAQ,KAAK,CAAA,EAAG,EAAA,EAAIA,MAAE,IAAA,CAAK,OAAO,GAAG,MAAA,EAAQA,KAAAA,CAAE,QAAO,EAAG,KAAA,EAAO,eAAe,CAAA;AAAA,IAClGA,KAAAA,CAAE,MAAA,CAAO,EAAE,IAAA,EAAMA,MAAE,OAAA,CAAQ,QAAQ,CAAA,EAAG,IAAA,EAAMA,KAAAA,CAAE,MAAA,EAAO,EAAG,KAAA,EAAO,cAAc,CAAA;AAAA,IAC7EA,MAAE,MAAA,CAAO;AAAA,MACP,IAAA,EAAMA,KAAAA,CAAE,OAAA,CAAQ,cAAc,CAAA;AAAA,MAAG,IAAA,EAAMA,MAAE,MAAA,EAAO;AAAA,MAAG,EAAA,EAAIA,KAAAA,CAAE,OAAA,CAAQ,OAAO,CAAA;AAAA,MACxE,EAAA,EAAIA,KAAAA,CAAE,IAAA,CAAK,CAAC,IAAA,EAAM,OAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAK,CAAC,CAAA;AAAA,MAAG,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,MACrE,KAAA,EAAO,aAAa,QAAA;AAAS,KAC9B,CAAA;AAAA,IACDA,KAAAA,CAAE,MAAA,CAAO,EAAE,IAAA,EAAMA,KAAAA,CAAE,OAAA,CAAQ,YAAY,CAAA,EAAG,GAAA,EAAKA,KAAAA,CAAE,MAAA,EAAO,EAAG,CAAA;AAAA,IAC3DA,KAAAA,CAAE,MAAA,CAAO,EAAE,IAAA,EAAMA,KAAAA,CAAE,OAAA,CAAQ,MAAM,CAAA,EAAG,GAAA,EAAKA,KAAAA,CAAE,MAAA,EAAO,EAAG,CAAA;AAAA,IACrDA,KAAAA,CAAE,MAAA,CAAO,EAAE,IAAA,EAAMA,KAAAA,CAAE,OAAA,CAAQ,eAAe,CAAA,EAAG,IAAA,EAAMA,KAAAA,CAAE,MAAA,EAAO,EAAG,CAAA;AAAA,IAC/DA,KAAAA,CAAE,MAAA,CAAO,EAAE,IAAA,EAAMA,KAAAA,CAAE,OAAA,CAAQ,OAAO,CAAA,EAAG,KAAA,EAAOA,KAAAA,CAAE,OAAA,EAAQ,EAAG;AAAA,GAC1D;AACH;AAMO,IAAM,aAAA,GAAgBA,KAAAA,CAAE,kBAAA,CAAmB,MAAA,EAAQ;AAAA,EACxDA,MAAE,MAAA,CAAO;AAAA,IACP,IAAA,EAAMA,KAAAA,CAAE,OAAA,CAAQ,QAAQ,CAAA;AAAA,IACxB,MAAA,EAAQA,MAAE,MAAA,EAAO;AAAA;AAAA,IAEjB,IAAA,EAAMA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IAC1B,WAAWA,KAAAA,CAAE,IAAA,CAAK,CAAC,KAAA,EAAO,MAAM,CAAC,CAAA;AAAA,IACjC,KAAA,EAAOA,MAAE,IAAA,CAAK,CAAC,SAAS,MAAM,CAAC,EAAE,QAAA;AAAS,GAC3C,CAAA;AAAA;AAAA,EAEDA,KAAAA,CAAE,MAAA,CAAO,EAAE,IAAA,EAAMA,KAAAA,CAAE,OAAA,CAAQ,SAAS,CAAA,EAAG,IAAA,EAAMA,KAAAA,CAAE,MAAA,EAAO,EAAG;AAC3D,CAAC;AAGM,IAAM,aAAA,GAAgBA,MAAE,MAAA,CAAO;AAAA;AAAA,EAEpC,QAAA,EAAUA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,KAAA,EAAOA,MAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC5C,SAASA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA,EAAS;AAAA,EACnC,KAAKA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA;AACxB,CAAC;AAmCD,IAAM,oBAA4CA,KAAAA,CAAE,IAAA;AAAA,EAAK,MACvDA,MAAE,MAAA,CAAO;AAAA,IACP,QAAA,EAAUA,MAAE,MAAA,EAAO;AAAA,IACnB,OAAA,EAASA,KAAAA,CAAE,KAAA,CAAMA,KAAAA,CAAE,OAAO,EAAE,KAAA,EAAOA,KAAAA,CAAE,MAAA,IAAU,MAAA,EAAQA,KAAAA,CAAE,MAAA,EAAO,EAAG,CAAC,CAAA;AAAA,IACpE,SAAA,EAAWA,KAAAA,CAAE,KAAA,CAAMA,KAAAA,CAAE,MAAA,CAAO;AAAA,MAC1B,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,MAChB,IAAA,EAAMA,MAAE,MAAA,EAAO;AAAA,MACf,SAAA,EAAW,iBAAA;AAAA,MACX,KAAA,EAAO,aAAa,QAAA,EAAS;AAAA,MAC7B,OAAA,EAASA,KAAAA,CAAE,KAAA,CAAM,aAAa,EAAE,QAAA,EAAS;AAAA,MACzC,KAAA,EAAO,cAAc,QAAA,EAAS;AAAA,MAC9B,MAAA,EAAQA,MAAE,MAAA,CAAO,EAAE,UAAUA,KAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,EAAG,OAAOA,KAAAA,CAAE,MAAA,GAAS,GAAA,EAAI,CAAE,UAAS,EAAG,EAAE,QAAA;AAAS,KACpG,CAAC,CAAA;AAAA,IACF,UAAA,EAAYA,KAAAA,CAAE,KAAA,CAAMA,KAAAA,CAAE,MAAA,CAAO;AAAA,MAC3B,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,MAChB,IAAA,EAAMA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,MAC1B,KAAA,EAAO,aAAa,QAAA,EAAS;AAAA,MAC7B,KAAA,EAAOA,MAAE,MAAA,CAAO,EAAE,SAASA,KAAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS,EAAG,UAAUA,KAAAA,CAAE,OAAA,GAAU,QAAA,EAAS,EAAG,CAAA,CAAE,QAAA,EAAS;AAAA,MACxG,KAAKA,KAAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,MAClC,KAAKA,KAAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,MAClC,KAAA,EAAO,kBAAkB,QAAA;AAAS,KACnC,CAAC;AAAA,GACH;AACH;AASA,IAAM,eAAA,GAAkBA,KAAAA,CAAE,MAAA,CAAO,EAAE,QAAA,EAAUA,KAAAA,CAAE,MAAA,EAAO,EAAG,OAAA,EAASA,KAAAA,CAAE,OAAA,EAAQ,EAAG,CAAA;AAE/E,IAAM,gBAAA,GAAmBA,MAAE,MAAA,CAAO;AAAA,EAChC,IAAA,EAAMA,KAAAA,CAAE,OAAA,CAAQ,QAAQ,CAAA;AAAA,EACxB,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,EAChB,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,EAChB,SAAA,EAAW,iBAAA;AAAA;AAAA,EAEX,KAAA,EAAO,YAAA;AAAA,EACP,SAASA,KAAAA,CAAE,KAAA,CAAM,aAAa,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EAC1C,UAAA,EAAYA,MAAE,KAAA,CAAM,CAACA,MAAE,KAAA,CAAMA,KAAAA,CAAE,QAAQ,CAAA,EAAGA,MAAE,MAAA,CAAO,EAAE,MAAMA,KAAAA,CAAE,MAAA,IAAU,CAAC,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EACpF,KAAA,EAAO,aAAA;AAAA,EACP,MAAA,EAAQA,MAAE,MAAA,CAAO,EAAE,UAAUA,KAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,EAAG,OAAOA,KAAAA,CAAE,MAAA,GAAS,GAAA,EAAI,CAAE,UAAS,EAAG,EAAE,QAAA,EAAS;AAAA,EACnG,SAAA,EAAW,gBAAgB,QAAA;AAC7B,CAAC,CAAA;AAED,IAAM,cAAA,GAAiBA,MAAE,MAAA,CAAO;AAAA,EAC9B,IAAA,EAAMA,KAAAA,CAAE,OAAA,CAAQ,MAAM,CAAA;AAAA,EACtB,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,EAChB,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,EAChB,SAAA,EAAW,iBAAA;AAAA,EACX,IAAIA,KAAAA,CAAE,KAAA,CAAMA,KAAAA,CAAE,MAAA,CAAO,EAAE,MAAA,EAAQA,KAAAA,CAAE,MAAA,EAAO,EAAG,OAAO,aAAA,EAAe,CAAC,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA;AAAA,EAEzE,KAAA,EAAO,YAAA;AAAA,EACP,SAAA,EAAW,gBAAgB,QAAA;AAC7B,CAAC,CAAA;AAED,IAAM,mBAAA,GAAsBA,MAAE,MAAA,CAAO;AAAA,EACnC,IAAA,EAAMA,KAAAA,CAAE,OAAA,CAAQ,WAAW,CAAA;AAAA,EAC3B,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,EAChB,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,EAChB,KAAA,EAAO,YAAA;AAAA,EACP,KAAA,EAAOA,MAAE,MAAA,CAAO,EAAE,SAASA,KAAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS,EAAG,UAAUA,KAAAA,CAAE,OAAA,GAAU,QAAA,EAAS,EAAG,CAAA,CAAE,QAAA,EAAS;AAAA,EACxG,KAAKA,KAAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EAClC,KAAKA,KAAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EAClC,KAAA,EAAO,kBAAkB,QAAA,EAAS;AAAA,EAClC,SAAA,EAAW,gBAAgB,QAAA;AAC7B,CAAC,CAAA;AAGD,IAAM,iBAAA,GAAoBA,MAAE,KAAA,CAAM;AAAA,EAChCA,MAAE,MAAA,CAAO,EAAE,MAAMA,KAAAA,CAAE,MAAA,IAAU,CAAA;AAAA,EAC7BA,MAAE,MAAA,CAAO,EAAE,SAASA,KAAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,CAAO,EAAE,MAAA,EAAQA,KAAAA,CAAE,QAAO,EAAG,KAAA,EAAO,eAAe,CAAC,GAAG;AACvF,CAAC,CAAA;AAED,IAAM,kBAAA,GAAqBA,MAAE,KAAA,CAAM;AAAA,EACjCA,MAAE,MAAA,CAAO,EAAE,MAAMA,KAAAA,CAAE,MAAA,IAAU,CAAA;AAAA,EAC7BA,KAAAA,CAAE,MAAA,CAAO,EAAE,UAAA,EAAYA,MAAE,MAAA,EAAO,EAAG,aAAA,EAAeA,KAAAA,CAAE,KAAA,CAAMA,KAAAA,CAAE,MAAA,EAAQ,GAAG;AACzE,CAAC,CAAA;AAED,IAAM,kBAAA,GAAqBA,MAAE,MAAA,CAAO;AAAA,EAClC,IAAA,EAAMA,KAAAA,CAAE,OAAA,CAAQ,UAAU,CAAA;AAAA,EAC1B,EAAA,EAAIA,KAAAA,CAAE,IAAA,CAAK,CAAC,QAAA,EAAU,aAAa,QAAA,EAAU,YAAA,EAAc,QAAA,EAAU,YAAY,CAAC,CAAA;AAAA,EAClF,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,EAChB,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA;AAAA,EAEhB,OAAA,EAASA,MAAE,KAAA,CAAM;AAAA,IACfA,MAAE,MAAA,CAAO,EAAE,MAAMA,KAAAA,CAAE,MAAA,IAAU,CAAA;AAAA,IAC7BA,KAAAA,CAAE,OAAO,EAAE,IAAA,EAAMA,MAAE,KAAA,CAAMA,KAAAA,CAAE,MAAMA,KAAAA,CAAE,MAAA,CAAO,EAAE,MAAA,EAAQA,KAAAA,CAAE,QAAO,EAAG,KAAA,EAAO,eAAe,CAAC,CAAC,CAAA,EAAG;AAAA,GAC5F,EAAE,QAAA,EAAS;AAAA;AAAA,EAEZ,eAAeA,KAAAA,CAAE,KAAA,CAAMA,KAAAA,CAAE,MAAA,CAAO,EAAE,MAAA,EAAQA,KAAAA,CAAE,MAAA,EAAO,EAAG,OAAO,aAAA,EAAe,CAAC,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EACzF,UAAA,EAAY,mBAAmB,QAAA,EAAS;AAAA,EACxC,GAAA,EAAK,kBAAkB,QAAA,EAAS;AAAA,EAChC,MAAA,EAAQ,kBAAkB,QAAA,EAAS;AAAA,EACnC,GAAA,EAAK,kBAAkB,QAAA,EAAS;AAAA;AAAA,EAEhC,KAAA,EAAO,aAAa,QAAA,EAAS;AAAA,EAC7B,EAAA,EAAIA,KAAAA,CAAE,KAAA,CAAMA,KAAAA,CAAE,OAAO,EAAE,MAAA,EAAQA,KAAAA,CAAE,MAAA,IAAU,KAAA,EAAO,aAAA,EAAe,CAAC,EAAE,QAAA,EAAS;AAAA;AAAA,EAE7E,WAAA,EAAa,aAAa,QAAA,EAAS;AAAA,EACnC,SAAA,EAAW,kBAAkB,QAAA,EAAS;AAAA,EACtC,YAAA,EAAcA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA;AAAA,EACvC,SAAA,EAAW,gBAAgB,QAAA;AAC7B,CAAC,CAAA;AAED,IAAM,gBAAA,GAAmBA,MAAE,MAAA,CAAO;AAAA,EAChC,IAAA,EAAMA,KAAAA,CAAE,OAAA,CAAQ,QAAQ,CAAA;AAAA,EACxB,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,EAChB,IAAA,EAAMA,MAAE,MAAA,EAAO;AAAA,EACf,MAAA,EAAQA,KAAAA,CAAE,KAAA,CAAMA,KAAAA,CAAE,MAAA,CAAO,EAAE,IAAA,EAAMA,KAAAA,CAAE,MAAA,EAAO,EAAG,KAAA,EAAO,aAAA,EAAe,CAAC,CAAA;AAAA,EACpE,SAASA,KAAAA,CAAE,IAAA,CAAK,CAAC,MAAA,EAAQ,cAAA,EAAgB,QAAQ,CAAC;AACpD,CAAC,CAAA;AAEM,IAAM,YAAA,GAAeA,KAAAA,CAAE,kBAAA,CAAmB,MAAA,EAAQ;AAAA,EACvD,gBAAA;AAAA,EAAkB,cAAA;AAAA,EAAgB,mBAAA;AAAA,EAAqB,kBAAA;AAAA,EAAoB;AAC7E,CAAC;AAOM,IAAM,eAAA,GAAkB;AAAA,EAC7B,SAAA;AAAA,EAAW,SAAA;AAAA,EAAW,cAAA;AAAA,EAAgB,aAAA;AAAA,EAAe,UAAA;AAAA,EAAY,aAAA;AAAA,EAAe;AAClF;AAUO,IAAM,uBAAA,GAA0BA,MAAE,MAAA,CAAO;AAAA,EAC9C,KAAA,EAAOA,MAAE,KAAA,CAAM,CAAC,eAAeA,KAAAA,CAAE,KAAA,CAAM,aAAa,CAAC,CAAC;AACxD,CAAC;AAGM,IAAM,gBAAA,GAAmBA,MAAE,MAAA,CAAO;AAAA,EACvC,IAAA,EAAMA,MAAE,MAAA,EAAO;AAAA,EACf,IAAA,EAAMA,MAAE,KAAA,CAAM;AAAA,IACZA,KAAAA,CAAE,MAAA,CAAO,EAAE,IAAA,EAAMA,KAAAA,CAAE,OAAA,CAAQ,QAAQ,CAAA,EAAG,MAAA,EAAQA,KAAAA,CAAE,IAAA,CAAK,YAAY,GAAG,CAAA;AAAA;AAAA,IAEpEA,KAAAA,CAAE,OAAO,EAAE,IAAA,EAAMA,MAAE,OAAA,CAAQ,MAAM,CAAA,EAAG,IAAA,EAAMA,KAAAA,CAAE,MAAA,IAAU,MAAA,EAAQA,KAAAA,CAAE,MAAMA,KAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA;AAAA;AAAA,IAE1FA,MAAE,MAAA,CAAO,EAAE,IAAA,EAAMA,KAAAA,CAAE,QAAQ,UAAU,CAAA,EAAG,KAAA,EAAOA,KAAAA,CAAE,KAAK,eAAe,CAAA,EAAG,OAAOA,KAAAA,CAAE,MAAA,IAAU;AAAA,GAC5F,CAAA;AAAA,EACD,QAAA,EAAUA,MAAE,OAAA,EAAQ;AAAA,EACpB,IAAA,EAAMA,MAAE,OAAA,EAAQ;AAAA;AAAA,EAEhB,YAAA,EAAc,wBAAwB,QAAA;AACxC,CAAC;AAGM,IAAM,uBAAA,GAA0BA,MAAE,MAAA,CAAO;AAAA,EAC9C,SAAA,EAAWA,KAAAA,CAAE,OAAA,CAAQ,UAAU,CAAA;AAAA,EAC/B,IAAA,EAAMA,MAAE,MAAA,EAAO;AAAA,EACf,MAAA,EAAQA,KAAAA,CAAE,MAAA,EAAO,CAAE,MAAM,uBAAuB,CAAA;AAAA,EAChD,MAAMA,KAAAA,CAAE,IAAA,CAAK,CAAC,OAAA,EAAS,UAAA,EAAY,QAAQ,CAAC,CAAA;AAAA,EAC5C,QAAA,EAAUA,MAAE,MAAA,CAAO;AAAA,IACjB,UAAA,EAAYA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IAChC,IAAA,EAAMA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAAS,GAC3B,EAAE,QAAA,EAAS;AAAA,EACZ,SAAA,EAAWA,KAAAA,CAAE,KAAA,CAAM,gBAAgB,CAAA;AAAA;AAAA,EAEnC,QAAA,EAAUA,MAAE,KAAA,CAAMA,KAAAA,CAAE,QAAQ,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,EACnC,OAAOA,KAAAA,CAAE,KAAA,CAAM,YAAY,CAAA,CAAE,IAAI,CAAC;AACpC,CAAC;AAYM,IAAM,iBAAA,GAAoBA,MAAE,MAAA,CAAO;AAAA,EACxC,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,EAChB,MAAA,EAAQA,MAAE,MAAA,EAAO;AAAA,EACjB,QAAA,EAAUA,MAAE,MAAA,EAAO;AAAA,EACnB,OAAA,EAASA,KAAAA,CAAE,KAAA,CAAMA,KAAAA,CAAE,MAAA,CAAO;AAAA,IACxB,IAAA,EAAMA,MAAE,MAAA,EAAO;AAAA,IACf,UAAA,EAAYA,MAAE,MAAA,EAAO;AAAA,IACrB,IAAA,EAAMA,KAAAA,CAAE,KAAA,CAAM,CAACA,KAAAA,CAAE,KAAK,YAAY,CAAA,EAAGA,KAAAA,CAAE,MAAA,CAAO,EAAE,IAAA,EAAMA,MAAE,MAAA,EAAO,EAAG,MAAA,EAAQA,KAAAA,CAAE,KAAA,CAAMA,KAAAA,CAAE,QAAQ,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACjG,QAAA,EAAUA,MAAE,OAAA;AAAQ,GACrB,CAAC,CAAA;AAAA,EACF,UAAA,EAAYA,MAAE,KAAA,CAAMA,KAAAA,CAAE,QAAQ,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,EACrC,KAAA,EAAOA,KAAAA,CAAE,KAAA,CAAMA,KAAAA,CAAE,MAAA,CAAO;AAAA,IACtB,IAAA,EAAMA,MAAE,MAAA,EAAO;AAAA,IACf,MAAMA,KAAAA,CAAE,IAAA,CAAK,CAAC,OAAA,EAAS,QAAA,EAAU,gBAAgB,CAAC,CAAA;AAAA,IAClD,MAAA,EAAQA,MAAE,MAAA,EAAO;AAAA,IACjB,EAAA,EAAIA,MAAE,MAAA,EAAO;AAAA,IACb,UAAA,EAAYA,MAAE,MAAA;AAAO,GACtB,CAAC,CAAA;AAAA;AAAA,EAEF,UAAA,EAAYA,KAAAA,CAAE,KAAA,CAAMA,KAAAA,CAAE,QAAQ,CAAA;AAAA,EAC9B,SAAA,EAAWA,KAAAA,CAAE,KAAA,CAAMA,KAAAA,CAAE,QAAQ,CAAA;AAAA,EAC7B,UAAA,EAAYA,KAAAA,CAAE,KAAA,CAAMA,KAAAA,CAAE,QAAQ,CAAA;AAAA,EAC9B,QAAA,EAAUA,KAAAA,CAAE,KAAA,CAAMA,KAAAA,CAAE,QAAQ,CAAA;AAAA,EAC5B,UAAA,EAAYA,KAAAA,CAAE,KAAA,CAAMA,KAAAA,CAAE,QAAQ,CAAA;AAAA,EAC9B,aAAaA,KAAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,CAAO,EAAE,MAAMA,KAAAA,CAAE,MAAA,EAAO,EAAG,OAAA,EAASA,MAAE,KAAA,CAAMA,KAAAA,CAAE,QAAQ,CAAA,EAAG,CAAC,CAAA;AAAA;AAAA,EAEjF,qBAAA,EAAuBA,MAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,CAAC,CAAA;AAAA,EAC5D,qBAAA,EAAuBA,MAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,EAAE;AAC/D,CAAC;AAGM,IAAM,sBAAA,GAAyBA,MAAE,MAAA,CAAO;AAAA,EAC7C,SAAA,EAAWA,KAAAA,CAAE,OAAA,CAAQ,UAAU,CAAA;AAAA,EAC/B,SAAA,EAAWA,MAAE,MAAA,EAAO;AAAA,EACpB,UAAA,EAAYA,MAAE,MAAA,EAAO;AAAA,EACrB,OAAA,EAASA,MAAE,MAAA,EAAO;AAAA,EAClB,QAAQA,KAAAA,CAAE,MAAA,CAAOA,KAAAA,CAAE,MAAA,IAAU,iBAAiB,CAAA;AAAA,EAC9C,YAAYA,KAAAA,CAAE,MAAA,CAAOA,KAAAA,CAAE,MAAA,IAAU,uBAAuB;AAC1D,CAAC;AAOM,IAAM,cAAA,GAAN,cAA6B,KAAA,CAAM;AAAA,EACxC,YAAY,KAAA,EAAgB;AAC1B,IAAA,KAAA,CAAM,0BAA0B,MAAA,CAAO,KAAK,CAAC,CAAA,qCAAA,EAAmC,UAAU,CAAA,yDAAA,CAC/B,CAAA;AAC3D,IAAA,IAAA,CAAK,IAAA,GAAO,gBAAA;AAAA,EACd;AACF;AAQO,SAAS,YAAY,GAAA,EAAgC;AAC1D,EAAA,IAAI,CAAC,OAAO,OAAO,GAAA,KAAQ,UAAU,MAAM,IAAI,eAAe,MAAS,CAAA;AACvE,EAAA,MAAM,UAAW,GAAA,CAAgC,SAAA;AACjD,EAAA,IAAI,OAAA,KAAY,UAAA,EAAY,MAAM,IAAI,eAAe,OAAO,CAAA;AAC5D,EAAA,OAAO,sBAAA,CAAuB,MAAM,GAAG,CAAA;AACzC;AAGO,SAAS,YAAY,QAAA,EAA4D;AACtF,EAAA,MAAM,GAAA,uBAAU,GAAA,EAA+B;AAC/C,EAAA,KAAA,MAAW,EAAA,IAAM,MAAA,CAAO,MAAA,CAAO,QAAA,CAAS,UAAU,GAAG,GAAA,CAAI,GAAA,CAAI,EAAA,CAAG,MAAA,EAAQ,EAAE,CAAA;AAC1E,EAAA,OAAO,GAAA;AACT;;;AC5XA,IAAM,kBAAA,GAA4C,EAAE,KAAA,EAAO,EAAE,WAAA,EAAa,EAAC,EAAG,YAAA,EAAc,EAAC,EAAE,EAAG,IAAA,EAAM,EAAC,EAAE;AAGpG,SAAS,uBAAuB,YAAA,EAAkD;AACvF,EAAA,uBAAO,IAAI,GAAA,CAAY,CAAC,GAAG,MAAA,CAAO,IAAA,CAAK,YAAA,CAAa,KAAA,CAAM,YAAY,CAAA,EAAG,GAAG,YAAA,CAAa,IAAI,CAAC,CAAA;AAChG;AAOO,SAAS,wBAAA,CACd,OACA,MAAA,EACqB;AACrB,EAAA,IAAI,MAAM,MAAA,KAAW,CAAA,EAAG,MAAM,IAAI,mBAAmB,4BAA4B,CAAA;AAEjF,EAAA,MAAM,SAAA,GAAa,KAAA,CAAM,CAAC,CAAA,CAAqB,KAAA,CAAM,SAAA;AACrD,EAAA,IAAI,MAAA,IAAU,MAAA,CAAO,SAAA,KAAc,SAAA,EAAW;AAC5C,IAAA,MAAM,IAAI,mBAAmB,CAAA,WAAA,EAAc,MAAA,CAAO,SAAS,CAAA,kBAAA,EAAqB,SAAS,KAAK,gBAAgB,CAAA;AAAA,EAChH;AACA,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,KAAA,EAAM,IAAK,KAAA,EAAO;AACnC,IAAA,IAAI,KAAA,CAAM,cAAc,SAAA,EAAW;AACjC,MAAA,MAAM,IAAI,mBAAmB,CAAA,WAAA,EAAc,KAAA,CAAM,SAAS,CAAA,kBAAA,EAAqB,SAAS,KAAK,IAAI,CAAA;AAAA,IACnG;AAAA,EACF;AAEA,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAoB;AACrC,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,KAAA,EAAM,IAAK,KAAA,EAAO;AACnC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA;AACrC,IAAA,IAAI,QAAA,EAAU,MAAM,IAAI,kBAAA,CAAmB,CAAA,OAAA,EAAU,MAAM,KAAK,CAAA,wBAAA,EAA2B,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAA;AAC3G,IAAA,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,KAAA,EAAO,IAAI,CAAA;AAAA,EAC5B;AAIA,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAAoB;AAC5C,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,KAAA,EAAM,IAAK,KAAA,EAAO;AACnC,IAAA,KAAA,MAAW,QAAQ,MAAA,CAAO,IAAA,CAAK,MAAM,OAAA,IAAW,EAAE,CAAA,EAAG;AACnD,MAAA,MAAM,QAAA,GAAW,WAAA,CAAY,GAAA,CAAI,IAAI,CAAA;AACrC,MAAA,IAAI,QAAA,QAAgB,IAAI,kBAAA,CAAmB,WAAW,IAAI,CAAA,wBAAA,EAA2B,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAA;AACrG,MAAA,WAAA,CAAY,GAAA,CAAI,MAAM,IAAI,CAAA;AAAA,IAC5B;AAAA,EACF;AAEA,EAAA,MAAM,eAAsC,MAAA,EAAQ,YAAA,GAChD,EAAE,KAAA,EAAO,OAAO,YAAA,CAAa,KAAA,IAAS,kBAAA,CAAmB,KAAA,EAAO,MAAM,MAAA,CAAO,YAAA,CAAa,IAAA,IAAQ,IAAG,GACrG,kBAAA;AACJ,EAAA,MAAM,SAAA,GAAY4C,2CAAuB,EAAE,IAAA,EAAM,aAAa,IAAA,EAAM,KAAA,EAAO,YAAA,CAAa,KAAA,EAAO,CAAA;AAC/F,EAAA,IAAI,SAAA,CAAU,MAAA,GAAS,CAAA,EAAG,MAAM,IAAI,mBAAmB,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA,EAAG,gBAAgB,CAAA;AAC7F,EAAA,MAAM,SAAS,KAAA,CAAM,GAAA,CAAI,CAAC,EAAE,KAAA,OAAY,KAAK,CAAA,CAAE,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM,CAAA,CAAE,MAAM,aAAA,CAAc,CAAA,CAAE,KAAK,CAAC,CAAA;AAC5F,EAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,CAAC,KAAA,CAAM,KAAA,EAAO,KAAK,CAAC,CAAC,CAAA;AAClE,EAAA,kBAAA,CAAmB,OAAO,MAAM,CAAA;AAChC,EAAA,uBAAA,CAAwB,OAAO,MAAM,CAAA;AACrC,EAAA,kBAAA,CAAmB,KAAK,CAAA;AACxB,EAAA,sBAAA,CAAuB,KAAA,EAAO,sBAAA,CAAuB,YAAY,CAAC,CAAA;AAClE,EAAA,OAAO,EAAE,SAAA,EAAW,WAAA,EAAa,QAAQ,WAAA,IAAe,IAAA,EAAM,cAAc,MAAA,EAAO;AACrF;AAQA,SAAS,uBAAA,CAAwB,OAAkC,MAAA,EAA8C;AAC/G,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,KAAA,EAAM,IAAK,KAAA,EAAO;AACnC,IAAA,KAAA,MAAW,CAAC,UAAA,EAAY,MAAM,CAAA,IAAK,MAAA,CAAO,QAAQ,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA,EAAG;AACtE,MAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,SAAA,IAAa,EAAC,EAAG;AAC1C,QAAA,IAAI,KAAA,CAAM,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,EAAG;AAC/B,QAAA,MAAM,MAAA,GAAS,MAAA,CAAO,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA;AACrC,QAAA,IAAI,CAAC,MAAA,EAAQ;AACX,UAAA,MAAM,IAAI,mBAAmB,CAAA,QAAA,EAAW,UAAU,sCAAsC,KAAA,CAAM,KAAK,KAAK,IAAI,CAAA;AAAA,QAC9G;AACA,QAAA,IAAI,OAAO,MAAA,EAAQ;AAIjB,UAAA,MAAM,IAAI,kBAAA;AAAA,YACR,CAAA,QAAA,EAAW,UAAU,CAAA,kCAAA,EAAqC,KAAA,CAAM,KAAK,CAAA,iDAAA,CAAA;AAAA,YACrE;AAAA,WACF;AAAA,QACF;AACA,QAAA,MAAM,SAAA,GAAY,MAAA,CAAO,MAAA,GAAS,KAAA,CAAM,KAAK,CAAA,EAAG,IAAA;AAChD,QAAA,MAAM,gBAAA,GAAmB,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,OAAA,IAAW,EAAE,CAAA,CAAE,IAAA,CAAK,CAAC,MAAA,KAAW,MAAA,CAAO,WAAW,CAAA;AAChG,QAAA,IAAI,SAAA,IAAa,oBAAoB,eAAA,CAAgB,SAAS,MAAM,eAAA,CAAgB,gBAAA,CAAiB,IAAI,CAAA,EAAG;AAC1G,UAAA,MAAM,IAAI,kBAAA;AAAA,YACR,CAAA,QAAA,EAAW,UAAU,CAAA,aAAA,EAAgB,KAAA,CAAM,KAAK,CAAA,GAAA,EAAM,SAAS,CAAA,WAAA,EAAc,KAAA,CAAM,KAAK,CAAA,uBAAA,EAA0B,gBAAA,CAAiB,IAAI,CAAA,CAAA;AAAA,YACvI;AAAA,WACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAOA,SAAS,mBAAmB,KAAA,EAAwC;AAKlE,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAoB;AACrC,EAAA,MAAM,KAAA,GAAQ,CAAC,IAAA,EAAc,KAAA,EAAe,IAAA,KAAiB;AAC3D,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA;AAC9B,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAM,IAAI,mBAAmB,CAAA,eAAA,EAAkB,IAAI,MAAM,KAAK,CAAA,gBAAA,EAAmB,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAA;AAAA,IACnG;AACA,IAAA,IAAA,CAAK,IAAI,IAAA,EAAM,CAAA,EAAG,KAAK,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,EACrC,CAAA;AAEA,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,KAAA,EAAM,IAAK,KAAA,EAAO;AACnC,IAAA,KAAA,CAAM,MAAM,KAAA,EAAO,CAAA,OAAA,EAAU,KAAA,CAAM,KAAK,KAAK,IAAI,CAAA;AAAA,EACnD;AACA,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,KAAA,EAAM,IAAK,KAAA,EAAO;AACnC,IAAA,IAAI,MAAM,MAAA,EAAQ;AAClB,IAAA,KAAA,CAAM,CAAA,EAAG,MAAM,KAAK,CAAA,KAAA,CAAA,EAAS,kCAAkC,KAAA,CAAM,KAAK,KAAK,IAAI,CAAA;AACnF,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,MAAM,CAAA,IAAK,MAAA,CAAO,QAAQ,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA,EAAG;AAChE,MAAA,IAAI,MAAA,CAAO,MAAA,IAAU,CAAC,MAAA,CAAO,WAAA,EAAa;AACxC,QAAA,KAAA,CAAM,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,OAAA,CAAA,EAAW,CAAA,+BAAA,EAAkC,KAAA,CAAM,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,CAAA,EAAK,IAAI,CAAA;AAAA,MACvG;AAAA,IACF;AAAA,EACF;AACA,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,KAAA,EAAM,IAAK,KAAA,EAAO;AACnC,IAAA,KAAA,MAAW,UAAA,IAAc,KAAA,CAAM,OAAA,IAAW,EAAC,EAAG;AAC5C,MAAA,KAAA,CAAM,SAAA,CAAU,MAAM,KAAA,EAAO,UAAU,GAAG,CAAA,UAAA,EAAa,KAAA,CAAM,KAAK,CAAA,CAAA,CAAA,EAAK,IAAI,CAAA;AAAA,IAC7E;AAAA,EACF;AACF;AAEA,SAAS,kBAAA,CAAmB,OAAkC,MAAA,EAA8C;AAC1G,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,KAAA,EAAM,IAAK,KAAA,EAAO;AACnC,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,MAAA,CAAO,QAAQ,KAAA,CAAM,KAAA,IAAS,EAAE,CAAA,EAAG;AAC5D,MAAA,IAAI,oBAAA,CAAqB,IAAA,CAAK,EAAE,CAAA,EAAG;AACnC,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA;AACjC,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAM,IAAI,mBAAmB,CAAA,MAAA,EAAS,IAAI,+BAA+B,IAAA,CAAK,EAAE,KAAK,IAAI,CAAA;AAAA,MAC3F;AACA,MAAA,IAAI,IAAA,CAAK,OAAA,IAAW,MAAA,CAAO,MAAA,EAAQ;AACjC,QAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,MAAA,EAAS,IAAI,sDAAsD,IAAI,CAAA;AAAA,MACtG;AAMA,MAAA,MAAM,UAAA,GAAa,KAAA,CAAM,OAAA,GAAU,IAAA,CAAK,EAAE,CAAA,EAAG,IAAA;AAC7C,MAAA,MAAM,gBAAA,GAAmB,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,OAAA,IAAW,EAAE,CAAA,CAAE,IAAA,CAAK,CAAC,MAAA,KAAW,MAAA,CAAO,WAAW,CAAA;AAChG,MAAA,IAAI,UAAA,IAAc,oBAAoB,eAAA,CAAgB,UAAU,MAAM,eAAA,CAAgB,gBAAA,CAAiB,IAAI,CAAA,EAAG;AAC5G,QAAA,MAAM,IAAI,kBAAA;AAAA,UACR,CAAA,MAAA,EAAS,IAAI,CAAA,mBAAA,EAAsB,IAAA,CAAK,EAAE,CAAA,KAAA,EAAQ,UAAU,CAAA,MAAA,EAAS,IAAA,CAAK,EAAE,CAAA,QAAA,EAAW,gBAAA,CAAiB,IAAI,CAAA,YAAA,CAAA;AAAA,UAC5G;AAAA,SACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AASA,SAAS,sBAAA,CAAuB,OAAkC,QAAA,EAAqC;AACrG,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,KAAA,EAAM,IAAK,KAAA,EAAO;AACnC,IAAA,MAAM,UAAA,GAAa;AAAA,MACjB,GAAI,KAAA,CAAM,QAAA,EAAU,IAAA,GAAO,sBAAA,CAAuB,MAAM,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,GAAI,EAAC;AAAA,MAC9E,GAAI,KAAA,CAAM,QAAA,EAAU,KAAA,GAAQ,sBAAA,CAAuB,MAAM,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,GAAI,EAAC;AAAA,MAChF,GAAG,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA,CAAE,OAAA,CAAQ,CAAC,MAAA,KAAW;AAAA,QACxD,GAAI,OAAO,QAAA,GAAW,sBAAA,CAAuB,OAAO,QAAA,CAAS,GAAG,IAAI,EAAC;AAAA,QACrE,GAAG,8BAA8B,MAAM;AAAA,OACxC;AAAA,KACH;AACA,IAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,MAAA,IAAI,CAAC,QAAA,CAAS,GAAA,CAAI,GAAG,CAAA,EAAG;AACtB,QAAA,MAAM,IAAI,kBAAA;AAAA,UACR,eAAe,GAAG,CAAA,6GAAA,CAAA;AAAA,UAClB;AAAA,SACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;ACrMO,IAAM,qBAAA,GAAwB5C,MAAE,YAAA,CAAa;AAAA,EAClD,SAAA,EAAW,eAAA;AAAA,EACX,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,YAAA,EAAcA,MACX,YAAA,CAAa;AAAA,IACZ,KAAA,EAAO6C,2CAAuB,QAAA,EAAS;AAAA,IACvC,IAAA,EAAMC,yCAAqB,QAAA;AAAS,GACrC,EACA,QAAA;AACL,CAAC;;;ACNM,SAAS,cAAA,CAAe,MAAc,QAAA,EAAkC;AAC7E,EAAA,MAAM,SAAS,eAAA,CAAgB,SAAA,CAAU,SAAA,CAAU,IAAA,EAAM,QAAQ,CAAC,CAAA;AAClE,EAAA,IAAI,CAAC,MAAA,CAAO,OAAA,EAAS,MAAM,IAAI,mBAAmB,YAAA,CAAa,MAAA,CAAO,KAAK,CAAA,EAAG,IAAI,CAAA;AAClF,EAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,MAAA,CAAO,IAAA,EAAK;AACpC;AAYO,SAAS,uBAAuB,OAAA,EAA2D;AAChG,EAAA,IAAI,MAAA;AACJ,EAAA,MAAM,SAA2B,EAAC;AAClC,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,IAAA,IAAI,0BAAA,CAA2B,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA,EAAG;AAC/C,MAAA,IAAI,QAAQ,MAAM,IAAI,kBAAA,CAAmB,iCAAA,EAAmC,OAAO,IAAI,CAAA;AACvF,MAAA,MAAM,MAAA,GAAS,sBAAsB,SAAA,CAAU,SAAA,CAAU,OAAO,IAAA,EAAM,MAAA,CAAO,QAAQ,CAAC,CAAA;AACtF,MAAA,IAAI,CAAC,MAAA,CAAO,OAAA,EAAS,MAAM,IAAI,kBAAA,CAAmB,YAAA,CAAa,MAAA,CAAO,KAAK,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA;AACzF,MAAA,MAAA,GAAS,MAAA,CAAO,IAAA;AAChB,MAAA;AAAA,IACF;AACA,IAAA,MAAA,CAAO,KAAK,cAAA,CAAe,MAAA,CAAO,IAAA,EAAM,MAAA,CAAO,QAAQ,CAAC,CAAA;AAAA,EAC1D;AACA,EAAA,OAAO,wBAAA,CAAyB,QAAQ,MAAM,CAAA;AAChD;AAEA,eAAsB,wBAAwB,GAAA,EAAuC;AACnF,EAAA,MAAM,KAAA,GAAQ,MAAM,mBAAA,CAAoB,GAAG,CAAA;AAC3C,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,MAAM,IAAI,kBAAA,CAAmB,CAAA,GAAA,EAAM,0BAAA,CAA2B,IAAA,CAAK,GAAG,CAAC,CAAA,UAAA,EAAa,GAAG,CAAA,CAAE,CAAA;AAEjH,EAAA,MAAM,UAA8B,EAAC;AACrC,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,WAAW,MAAMC,iBAAA,CAAS1C,UAAK,GAAA,EAAK,IAAI,GAAG,MAAM,CAAA;AACvD,IAAA,IAAI,MAAA,CAAO,UAAA,CAAW,QAAA,EAAU,MAAM,IAAI,yBAAA,EAA2B;AACnE,MAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,4CAAA,EAA+C,yBAAyB,UAAU,IAAI,CAAA;AAAA,IACrH;AACA,IAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,IAAA,EAAM,IAAA,EAAM,UAAU,CAAA;AAAA,EACvC;AAEA,EAAA,MAAM,UAAA,GAAa,uBAAuB,OAAO,CAAA;AACjD,EAAA,OAAO,EAAE,UAAA,EAAY,WAAA,EAAa,qBAAA,CAAsB,UAAU,GAAG,KAAA,EAAM;AAC7E;AAEA,SAAS,SAAA,CAAU,MAAc,QAAA,EAA2B;AAC1D,EAAA,IAAI;AACF,IAAA,OAAO2C,YAAS,QAAQ,CAAA;AAAA,EAC1B,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,IAAI,kBAAA,CAAmB,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,gBAAgB,IAAI,CAAA;AAAA,EAC5F;AACF;AAEA,IAAM,gBAAA,GAAmB,CAAC,IAAA,KACxB,0BAAA,CAA2B,IAAA,CAAK,CAAC,SAAA,KAAcC,YAAA,CAAQ,IAAI,CAAA,KAAM,SAAS,CAAA;AAE5E,eAAe,oBAAoB,GAAA,EAAgC;AACjE,EAAA,MAAM,UAAU,MAAMxC,gBAAAA,CAAQ,KAAK,EAAE,aAAA,EAAe,MAAM,CAAA;AAC1D,EAAA,OAAO,QACJ,MAAA,CAAO,CAAC,UAAU,KAAA,CAAM,MAAA,MAAY,gBAAA,CAAiB,KAAA,CAAM,IAAI,CAAC,EAChE,GAAA,CAAI,CAAC,UAAU,KAAA,CAAM,IAAI,EACzB,IAAA,EAAK;AACV;AAEA,SAAS,aAAa,KAAA,EAA2B;AAC/C,EAAA,OAAO,KAAA,CAAM,OACV,GAAA,CAAI,CAAC,UAAW,KAAA,CAAM,IAAA,CAAK,MAAA,GAAS,CAAA,GAAI,CAAA,EAAG,KAAA,CAAM,KAAK,IAAA,CAAK,GAAG,CAAC,CAAA,EAAA,EAAK,KAAA,CAAM,OAAO,KAAK,KAAA,CAAM,OAAQ,CAAA,CACpG,IAAA,CAAK,IAAI,CAAA;AACd;;;ACrFA,IAAM,WAAA,GAAc,qEAAA;AAUpB,IAAM,KAAA,GAA4D;AAAA,EAChE,EAAE,OAAA,EAAS,sBAAA,EAAwB,MAAA,EAAQ,iDAAA,EAAkD;AAAA,EAC7F,EAAE,OAAA,EAAS,qBAAA,EAAuB,MAAA,EAAQ,mCAAA,EAAoC;AAAA,EAC9E,EAAE,OAAA,EAAS,iBAAA,EAAmB,MAAA,EAAQ,mBAAA,EAAoB;AAAA,EAC1D,EAAE,OAAA,EAAS,oBAAA,EAAsB,MAAA,EAAQ,6BAAA,EAA8B;AAAA,EACvE;AAAA,IACE,OAAA,EAAS,WAAA;AAAA,IACT,MAAA,EAAQ;AAAA;AAEZ,CAAA;AAEO,SAAS,oBAAoB,UAAA,EAAkE;AACpG,EAAA,MAAM,UAAkC,EAAC;AACzC,EAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,IAAA,IAAI,SAAA,CAAU,SAAS,KAAA,EAAO;AAC5B,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,CAAC,EAAE,OAAA,EAAQ,KAAM,OAAA,CAAQ,IAAA,CAAK,SAAA,CAAU,GAAG,CAAC,CAAA;AACpE,MAAA,IAAI,IAAA,EAAM,OAAA,CAAQ,IAAA,CAAK,EAAE,GAAA,EAAK,UAAU,GAAA,EAAK,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAQ,CAAA;AAAA,IACpE,CAAA,MAAA,IAAW,UAAU,IAAA,KAAS,MAAA,IAAU,YAAY,IAAA,CAAK,SAAA,CAAU,GAAG,CAAA,EAAG;AACvE,MAAA,OAAA,CAAQ,KAAK,EAAE,GAAA,EAAK,UAAU,GAAA,EAAK,MAAA,EAAQ,qHAAgH,CAAA;AAAA,IAC7J;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;ACrBO,IAAM,kBAAA,GAAqB;AAClC,IAAM,YAAA,GAAe,MAAA;AACrB,IAAM,gBAAA,GAAmB,cAAA;AAEzB,IAAM,kBAAA,GAAqBT,MAAE,MAAA,CAAO;AAAA,EAClC,SAASA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA,EAAS;AAAA,EACnC,IAAA,EAAMA,KAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACtB,YAAA,EAAcA,KAAAA,CAAE,MAAA,EAAO,CAAE,OAAO,EAAE,CAAA;AAAA;AAAA,EAElC,uBAAuBA,KAAAA,CAAE,MAAA,GAAS,MAAA,CAAO,EAAE,EAAE,QAAA,EAAS;AAAA,EACtD,QAAA,EAAUA,KAAAA,CAAE,MAAA,EAAO,CAAE,OAAO,EAAE,CAAA;AAAA;AAAA,EAE9B,iBAAA,EAAmBA,KAAAA,CAAE,MAAA,EAAO,CAAE,OAAO,EAAE,CAAA;AAAA,EACvC,WAAA,EAAaA,MAAE,OAAA;AACjB,CAAC,CAAA;AAED,IAAM,aAAA,GAAgBA,MAAE,MAAA,CAAO;AAAA,EAC7B,OAAA,EAASA,KAAAA,CAAE,OAAA,CAAQ,CAAC,CAAA;AAAA,EACpB,SAAA,EAAWA,KAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAC3B,OAAA,EAASA,KAAAA,CAAE,KAAA,CAAM,kBAAkB;AACrC,CAAC,CAAA;AAWM,IAAM,YAAA,GAAe,CAAC,SAAA,MAAyC,EAAE,SAAS,CAAA,EAAG,SAAA,EAAW,OAAA,EAAS,EAAC,EAAE;AAE3G,eAAsB,sBAAA,CAAuB,KAAa,SAAA,EAAgD;AACxG,EAAA,MAAM,WAAA,GAAcK,SAAAA,CAAK,GAAA,EAAK,kBAAA,EAAoB,cAAc,gBAAgB,CAAA;AAChF,EAAA,MAAM,GAAA,GAAM,MAAM0C,iBAAAA,CAAS,WAAA,EAAa,MAAM,CAAA,CAAE,KAAA,CAAM,MAAM,IAAI,CAAA;AAChE,EAAA,IAAI,GAAA,KAAQ,MAAM,OAAO,EAAE,SAAS,YAAA,CAAa,SAAS,CAAA,EAAG,WAAA,EAAa,MAAA,EAAU;AAEpF,EAAA,MAAM,SAAS,aAAA,CAAc,SAAA,CAAU,SAAA,CAAU,WAAA,EAAa,GAAG,CAAC,CAAA;AAClE,EAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,IAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,2BAAA,EAA8B,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,EAAG,OAAA,IAAW,YAAY,CAAA,CAAA,EAAI,WAAW,CAAA;AAAA,EAC3H;AACA,EAAA,IAAI,MAAA,CAAO,IAAA,CAAK,SAAA,KAAc,SAAA,EAAW;AACvC,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,wCAAA,EAA2C,MAAA,CAAO,IAAA,CAAK,SAAS,uBAAuB,SAAS,CAAA,CAAA,CAAA;AAAA,MAChG;AAAA,KACF;AAAA,EACF;AACA,EAAA,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,CAAC,OAAO5C,MAAAA,KAAU;AAC5C,IAAA,IAAI,KAAA,CAAM,OAAA,KAAYA,MAAAA,GAAQ,CAAA,EAAG;AAC/B,MAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,2DAAA,EAA8D,KAAA,CAAM,IAAI,KAAK,WAAW,CAAA;AAAA,IACvH;AAAA,EACF,CAAC,CAAA;AAED,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,GAAG,EAAE,CAAA;AACrC,EAAA,OAAO,EAAE,OAAA,EAAS,MAAA,CAAO,IAAA,EAAM,WAAA,EAAa,GAAA,GAAM,MAAM,YAAA,CAAa,GAAA,EAAK,GAAA,CAAI,OAAO,CAAA,GAAI,MAAA,EAAU;AACrG;AAEA,eAAsB,gBAAA,CAAiB,KAAa,OAAA,EAAkC;AACpF,EAAA,MAAM+C,MAAA,GAAO7C,UAAK,GAAA,EAAK,kBAAA,EAAoB,cAAc,CAAA,EAAG,GAAA,CAAI,OAAO,CAAC,CAAA,cAAA,CAAgB,CAAA;AACxF,EAAA,OAAO0C,iBAAAA,CAASG,MAAA,EAAM,MAAM,CAAA,CAAE,MAAM,MAAM;AACxC,IAAA,MAAM,IAAI,kBAAA,CAAmB,4BAAA,EAA8BA,MAAI,CAAA;AAAA,EACjE,CAAC,CAAA;AACH;AAEA,eAAsB,YAAA,CAAa,KAAa,OAAA,EAA6C;AAC3F,EAAA,MAAMA,MAAA,GAAO7C,UAAK,GAAA,EAAK,kBAAA,EAAoB,cAAc,CAAA,EAAG,GAAA,CAAI,OAAO,CAAC,CAAA,cAAA,CAAgB,CAAA;AACxF,EAAA,OAAO,UAAU6C,MAAA,EAAM,MAAM,gBAAA,CAAiB,GAAA,EAAK,OAAO,CAAC,CAAA;AAC7D;AAEA,eAAsB,gBAAA,CAAiB,KAAa,KAAA,EAAsC;AACxF,EAAA,MAAMA,SAAO7C,SAAAA,CAAK,GAAA,EAAK,oBAAoB,CAAA,EAAG,KAAA,CAAM,IAAI,CAAA,IAAA,CAAM,CAAA;AAC9D,EAAA,OAAO0C,iBAAAA,CAASG,MAAA,EAAM,MAAM,CAAA,CAAE,MAAM,MAAM;AACxC,IAAA,MAAM,IAAI,kBAAA,CAAmB,wBAAA,EAA0BA,MAAI,CAAA;AAAA,EAC7D,CAAC,CAAA;AACH;AAEO,IAAM,UAAA,GAAa,CAACnD,KAAAA,KAAyBG,iBAAAA,CAAW,QAAQ,EAAE,MAAA,CAAOH,KAAI,CAAA,CAAE,MAAA,CAAO,KAAK;AAE3F,IAAM,aAAA,GAAgB,CAAC,OAAA,EAAiB,WAAA,KAAgC,CAAA,EAAG,GAAA,CAAI,OAAO,CAAC,CAAA,CAAA,EAAI,WAAA,CAAY,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA;AAEnH,SAAS,kBAAA,CAAmB;AAAA,EACjC,IAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,EAKW;AACT,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,MAAM,IAAI,CAAA,CAAA;AAAA,IACV,iBAAiB,SAAS,CAAA,CAAA;AAAA,IAC1B,oBAAoB,WAAW,CAAA,CAAA;AAAA,IAC/B;AAAA,GACF,CAAE,KAAK,IAAI,CAAA;AACX,EAAA,OAAO,CAAC,MAAA,EAAQ,GAAG,IAAA,CAAK,UAAA,CAAW,IAAI,CAAC,SAAA,KAAc,CAAA,EAAG,SAAA,CAAU,GAAG,CAAA,CAAA,CAAG,CAAC,CAAA,CAAE,IAAA,CAAK,MAAM,CAAA,GAAI,IAAA;AAC7F;AAQA,eAAsB,cAAA,CAAe;AAAA,EACnC,GAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,EAM8B;AAC5B,EAAA,MAAM,GAAA,GAAM,SAAA,CAAU,OAAA,CAAQ,OAAA,CAAQ,GAAG,EAAE,CAAA;AAC3C,EAAA,MAAM,OAAA,GAAA,CAAW,GAAA,EAAK,OAAA,IAAW,CAAA,IAAK,CAAA;AACtC,EAAA,MAAM,IAAA,GAAO,aAAA,CAAc,OAAA,EAAS,WAAW,CAAA;AAC/C,EAAA,MAAMgB,IAAAA,GAAM,kBAAA,CAAmB,EAAE,IAAA,EAAM,SAAA,EAAW,UAAU,OAAA,CAAQ,SAAA,EAAW,WAAA,EAAa,IAAA,EAAM,CAAA;AAElG,EAAA,MAAM,OAAA,GAAUV,SAAAA,CAAK,GAAA,EAAK,kBAAA,EAAoB,YAAY,CAAA;AAC1D,EAAA,MAAM8C,cAAA,CAAM,OAAA,EAAS,EAAE,SAAA,EAAW,MAAM,CAAA;AACxC,EAAA,MAAM,YAAA,GAAe,GAAG,IAAA,CAAK,SAAA,CAAU,KAAK,QAAA,EAAU,IAAA,EAAM,CAAC,CAAC;AAAA,CAAA;AAC9D,EAAA,MAAMC,kBAAA,CAAU/C,UAAK,GAAA,EAAK,kBAAA,EAAoB,GAAG,IAAI,CAAA,IAAA,CAAM,GAAGU,IAAG,CAAA;AACjE,EAAA,MAAMqC,kBAAA,CAAU/C,UAAK,OAAA,EAAS,CAAA,EAAG,IAAI,OAAO,CAAC,CAAA,cAAA,CAAgB,CAAA,EAAG,YAAY,CAAA;AAE5E,EAAA,MAAM,OAAA,GAA4B;AAAA,IAChC,GAAG,SAAA,CAAU,OAAA;AAAA,IACb,OAAA,EAAS;AAAA,MACP,GAAG,UAAU,OAAA,CAAQ,OAAA;AAAA,MACrB;AAAA,QACE,OAAA;AAAA,QACA,IAAA;AAAA,QACA,YAAA,EAAc,WAAA;AAAA,QACd,qBAAA,EAAuB,KAAK,YAAA,IAAgB,IAAA;AAAA,QAC5C,QAAA,EAAU,WAAWU,IAAG,CAAA;AAAA,QACxB,iBAAA,EAAmB,WAAW,YAAY,CAAA;AAAA,QAC1C;AAAA;AACF;AACF,GACF;AACA,EAAA,MAAMqC,kBAAA,CAAU/C,SAAAA,CAAK,OAAA,EAAS,gBAAgB,CAAA,EAAG,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,OAAA,EAAS,IAAA,EAAM,CAAC,CAAC;AAAA,CAAI,CAAA;AACxF,EAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,WAAA,EAAY;AACtC;AAEA,IAAM,GAAA,GAAM,CAAC,OAAA,KAA4B,MAAA,CAAO,OAAO,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAExE,SAAS,SAAA,CAAU,MAAc,GAAA,EAAsB;AACrD,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,EACvB,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,IAAI,kBAAA,CAAmB,gBAAA,EAAkB,IAAI,CAAA;AAAA,EACrD;AACF;;;ACjJA,eAAsB,yBAAA,CACpB,KACA,MAAA,EACoC;AACpC,EAAA,MAAM,YAAY,MAAM,sBAAA,CAAuB,GAAA,EAAK,MAAA,CAAO,WAAW,SAAS,CAAA;AAC/E,EAAA,MAAM,GAAA,GAAM,SAAA,CAAU,OAAA,CAAQ,OAAA,CAAQ,GAAG,EAAE,CAAA;AAC3C,EAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AAEjB,EAAA,IAAI,GAAA,CAAI,YAAA,KAAiB,MAAA,CAAO,WAAA,EAAa;AAC3C,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,0BAAA,EAA6B,IAAI,IAAI,CAAA,gEAAA,CAAA;AAAA,MACrC,GAAG,kBAAkB,CAAA,kBAAA;AAAA,KACvB;AAAA,EACF;AAEA,EAAA,MAAM,gBAAA,GAAmB,GAAA,CAAI,OAAA,GAAU,CAAA,GAAI,MAAM,aAAa,GAAA,EAAK,GAAA,CAAI,OAAA,GAAU,CAAC,CAAA,GAAI,MAAA;AACtF,EAAA,MAAM,IAAA,GAAO,MAAM,aAAA,CAAc,EAAE,YAAY,MAAA,CAAO,UAAA,EAAY,kBAAkB,CAAA;AACpF,EAAA,MAAM,cAAc,kBAAA,CAAmB;AAAA,IACrC,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,SAAA,EAAW,OAAO,UAAA,CAAW,SAAA;AAAA,IAC7B,aAAa,MAAA,CAAO,WAAA;AAAA,IACpB;AAAA,GACD,CAAA;AACD,EAAA,IAAI,WAAA,KAAiB,MAAM,gBAAA,CAAiB,GAAA,EAAK,GAAG,CAAA,EAAI;AACtD,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,EAAG,IAAI,IAAI,CAAA,wFAAA,CAAA;AAAA,MACX;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,SAAS,GAAA,CAAI,OAAA;AAAA,IACb,uBAAuB,GAAA,CAAI,qBAAA;AAAA,IAC3B,aAAa,GAAA,CAAI,WAAA;AAAA,IACjB,UAAU,GAAA,CAAI,QAAA;AAAA,IACd,YAAY,IAAA,CAAK;AAAA,GACnB;AACF;AAwBA,eAAsB,uBAAA,CAAwB,KAAa,MAAA,EAAyD;AAClH,EAAA,MAAM,YAAY,MAAM,sBAAA,CAAuB,GAAA,EAAK,MAAA,CAAO,WAAW,SAAS,CAAA;AAC/E,EAAA,MAAM,OAAA,GAAU,UAAU,OAAA,CAAQ,OAAA;AAClC,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,EAAA,CAAG,EAAE,CAAA;AACzB,EAAA,IAAI,CAAC,GAAA,EAAK,OAAO,EAAC;AAClB,EAAA,IAAI,GAAA,CAAI,YAAA,KAAiB,MAAA,CAAO,WAAA,EAAa;AAC3C,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,0BAAA,EAA6B,IAAI,IAAI,CAAA,gEAAA,CAAA;AAAA,MACrC,GAAG,kBAAkB,CAAA,kBAAA;AAAA,KACvB;AAAA,EACF;AACA,EAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,IAC7B,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,aAAa,KAAA,CAAM,YAAA;AAAA,IACnB,qBAAqB,KAAA,CAAM;AAAA,GAC7B,CAAE,CAAA;AACJ;;;ACjFA,eAAsB,YAAY,EAAE,GAAA,EAAK,gBAAA,EAAkB,KAAA,EAAO,KAAI,EAAiC;AACrG,EAAA,MAAM,MAAA,GAAS,MAAM,uBAAA,CAAwB,GAAG,CAAA;AAChD,EAAA,MAAM,YAAY,MAAM,sBAAA,CAAuB,GAAA,EAAK,MAAA,CAAO,WAAW,SAAS,CAAA;AAC/E,EAAA,MAAM,GAAA,GAAM,SAAA,CAAU,OAAA,CAAQ,OAAA,CAAQ,GAAG,EAAE,CAAA;AAE3C,EAAA,IAAI,KAAA,SAAc,cAAA,CAAe,EAAE,KAAK,MAAA,EAAQ,SAAA,EAAW,GAAA,EAAK,GAAA,EAAK,CAAA;AAErE,EAAA,IAAI,GAAA,EAAK,YAAA,KAAiB,MAAA,CAAO,WAAA,EAAa;AAC5C,IAAA,GAAA,CAAI,CAAA,kBAAA,EAAgB,kBAAkB,CAAA,CAAA,EAAI,GAAA,CAAI,IAAI,CAAA,oCAAA,CAAsC,CAAA;AACxF,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,MAAM,IAAA,GAAO,MAAM,aAAA,CAAc,EAAE,UAAA,EAAY,OAAO,UAAA,EAAY,gBAAA,EAAkB,SAAA,CAAU,WAAA,EAAa,CAAA;AAC3G,EAAA,MAAM,WAAA,GAAc,mBAAA,CAAoB,IAAA,CAAK,UAAU,CAAA;AACvD,EAAA,IAAI,WAAA,CAAY,MAAA,GAAS,CAAA,IAAK,CAAC,gBAAA,EAAkB;AAC/C,IAAA,GAAA,CAAI,kEAA6D,CAAA;AACjE,IAAA,KAAA,MAAW,SAAA,IAAa,WAAA,EAAa,GAAA,CAAI,CAAA,EAAA,EAAK,SAAA,CAAU,SAAA,CAAU,GAAG,CAAC,CAAA,KAAA,EAAQ,SAAA,CAAU,MAAM,CAAA,CAAE,CAAA;AAChG,IAAA,GAAA,CAAI,qJAAqJ,CAAA;AACzJ,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAA,GAAU,MAAM,cAAA,CAAe;AAAA,IACnC,GAAA;AAAA,IACA,SAAA;AAAA,IACA,IAAA;AAAA,IACA,aAAa,MAAA,CAAO,WAAA;AAAA,IACpB,WAAA,EAAa,YAAY,MAAA,GAAS;AAAA,GACnC,CAAA;AACD,EAAA,GAAA;AAAA,IACE,CAAA,MAAA,EAAS,kBAAkB,CAAA,CAAA,EAAI,OAAA,CAAQ,IAAI,CAAA,YAAA,EAAU,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA,aAAA,CAAA,IACxE,OAAA,CAAQ,WAAA,GAAc,yDAAA,GAAuD,EAAA;AAAA,GAClF;AACA,EAAA,OAAO,CAAA;AACT;AAEA,eAAe,cAAA,CAAe;AAAA,EAC5B,GAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAA;AAAA,EACA;AACF,CAAA,EAMoB;AAClB,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,GAAA,CAAI,CAAA,6BAAA,EAAgC,MAAA,CAAO,UAAA,CAAW,SAAS,CAAA,0DAAA,CAAuD,CAAA;AACtH,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,IAAIyB,WAAAA;AACJ,EAAA,IAAI,YAAA,GAA8B,IAAA;AAClC,EAAA,KAAA,MAAW,KAAA,IAAS,SAAA,CAAU,OAAA,CAAQ,OAAA,EAAS;AAC7C,IAAA,MAAMf,IAAAA,GAAM,MAAM,gBAAA,CAAiB,GAAA,EAAK,KAAK,CAAA;AAC7C,IAAA,IAAI,UAAA,CAAWA,IAAG,CAAA,KAAM,KAAA,CAAM,QAAA,EAAU;AACtC,MAAA,GAAA,CAAI,CAAA,EAAG,kBAAkB,CAAA,CAAA,EAAI,KAAA,CAAM,IAAI,CAAA,uFAAA,CAAoF,CAAA;AAC3H,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,MAAM,YAAA,GAAe,MAAM,gBAAA,CAAiB,GAAA,EAAK,MAAM,OAAO,CAAA;AAC9D,IAAA,IAAI,UAAA,CAAW,YAAY,CAAA,KAAM,KAAA,CAAM,iBAAA,EAAmB;AACxD,MAAA,GAAA,CAAI,CAAA,iBAAA,EAAoB,KAAA,CAAM,IAAI,CAAA,+GAAA,CAA4G,CAAA;AAC9I,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,YAAY,CAAA;AACxC,IAAA,IAAI,KAAA,CAAM,OAAA,GAAU,CAAA,IAAK,QAAA,CAAS,WAAWe,WAAAA,EAAY;AACvD,MAAA,GAAA,CAAI,CAAA,yBAAA,EAA4B,KAAA,CAAM,IAAI,CAAA,6DAAA,CAA0D,CAAA;AACpG,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,IAAI,KAAA,CAAM,0BAA0B,YAAA,EAAc;AAChD,MAAA,GAAA,CAAI,CAAA,6BAAA,EAAgC,KAAA,CAAM,IAAI,CAAA,uEAAA,CAAoE,CAAA;AAClH,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAAA,cAAa,QAAA,CAAS,EAAA;AACtB,IAAA,YAAA,GAAe,KAAA,CAAM,YAAA;AAAA,EACvB;AAEA,EAAA,IAAI,GAAA,CAAI,YAAA,KAAiB,MAAA,CAAO,WAAA,EAAa;AAC3C,IAAA,GAAA,CAAI,CAAA,0BAAA,EAA6B,GAAA,CAAI,IAAI,CAAA,gEAAA,CAA6D,CAAA;AACtG,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,MAAM,gBAAA,GAAmB,GAAA,CAAI,OAAA,GAAU,CAAA,GAAI,MAAM,aAAa,GAAA,EAAK,GAAA,CAAI,OAAA,GAAU,CAAC,CAAA,GAAI,MAAA;AACtF,EAAA,MAAM,IAAA,GAAO,MAAM,aAAA,CAAc,EAAE,YAAY,MAAA,CAAO,UAAA,EAAY,kBAAkB,CAAA;AACpF,EAAA,MAAM,cAAc,kBAAA,CAAmB;AAAA,IACrC,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,SAAA,EAAW,OAAO,UAAA,CAAW,SAAA;AAAA,IAC7B,aAAa,MAAA,CAAO,WAAA;AAAA,IACpB;AAAA,GACD,CAAA;AACD,EAAA,IAAI,WAAA,KAAiB,MAAM,gBAAA,CAAiB,GAAA,EAAK,GAAG,CAAA,EAAI;AACtD,IAAA,GAAA,CAAI,CAAA,EAAG,kBAAkB,CAAA,CAAA,EAAI,GAAA,CAAI,IAAI,CAAA,mFAAA,CAAgF,CAAA;AACrH,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,GAAA,CAAI,CAAA,0BAAA,EAAwB,UAAU,OAAA,CAAQ,OAAA,CAAQ,MAAM,CAAA,gBAAA,EAAmB,GAAA,CAAI,IAAI,CAAA,CAAE,CAAA;AACzF,EAAA,OAAO,CAAA;AACT;AAEA,IAAM,SAAA,GAAY,CAACf,IAAAA,KAAwBA,IAAAA,CAAI,MAAM,IAAI,CAAA,CAAE,CAAC,CAAA,IAAKA,IAAAA;;;AChG1D,SAAS,+BAA+B,UAAA,EAAsD;AACnG,EAAA,MAAM,GAAA,GAAM;AAAA,IACV,iBAAA,EAAmB,gBAAA;AAAA,IACnB,WAAW,UAAA,CAAW,SAAA;AAAA,IACtB,WAAA,EAAa,WAAW,WAAA,IAAe,MAAA;AAAA,IACvC,OAAO,EAAC;AAAA,IACR,MAAA,EAAQ,UAAA,CAAW,MAAA,CAAO,GAAA,CAAI,YAAY,CAAA;AAAA,IAC1C,YAAA,EAAc;AAAA,MACZ,KAAA,EAAO,WAAW,YAAA,CAAa,KAAA;AAAA,MAC/B,IAAA,EAAM,CAAC,GAAG,UAAA,CAAW,aAAa,IAAI;AAAA;AACxC,GACF;AACA,EAAA,MAAM,MAAA,GAAS,yBAAA,CAA0B,SAAA,CAAU,GAAG,CAAA;AACtD,EAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA;AACnC,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,gDAAA,EAAmD,KAAA,GAAQ,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,CAAA,EAAA,EAAK,KAAA,CAAM,OAAO,CAAA,CAAA,GAAK,eAAe,CAAA;AAAA,KAC1H;AAAA,EACF;AACA,EAAA,OAAO,kBAAA,CAAmB,OAAO,IAAI,CAAA;AACvC;AAEA,SAAS,aAAa,KAAA,EAAkB;AACtC,EAAA,MAAM,UAAU,MAAA,CAAO,OAAA,CAAQ,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA;AAClD,EAAA,MAAM0B,cAAa,OAAA,CAAQ,MAAA,CAAO,CAAC,GAAG,MAAM,CAAA,KAAM,MAAA,CAAO,WAAW,EAAE,GAAA,CAAI,CAAC,CAAC,IAAI,MAAM,IAAI,CAAA;AAC1F,EAAA,OAAO;AAAA,IACL,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,aAAa,KAAA,CAAM,WAAA;AAAA,IACnB,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,OAAA,EAAS,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,MAAM,CAAA,KAAM,aAAA,CAAc,IAAA,EAAM,MAAM,CAAC,CAAA;AAAA;AAAA,IAEpE,UAAA,EAAYA,WAAAA,CAAW,MAAA,GAAS,CAAA,GAAIA,WAAAA,GAAa,MAAA;AAAA,IACjD,OAAO,MAAA,CAAO,OAAA,CAAQ,MAAM,KAAA,IAAS,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,IAAI,CAAA,KAAM,WAAA,CAAY,MAAM,KAAA,EAAO,IAAA,EAAM,IAAI,CAAC,CAAA;AAAA,IACnG,UAAU,KAAA,CAAM,OAAA,IAAW,EAAC,EAAG,GAAA,CAAI,CAACtC,MAAAA,MAAW;AAAA,MAC7C,OAAA,EAAS,CAAC,GAAGA,MAAAA,CAAM,OAAO,CAAA;AAAA,MAC1B,MAAA,EAAQA,OAAM,MAAA,IAAU,KAAA;AAAA,MACxB,MAAMA,MAAAA,CAAM;AAAA,KACd,CAAE,CAAA;AAAA,IACF,QAAA,EAAU;AAAA;AAAA,MAER,IAAA,EAAM,KAAA,CAAM,QAAA,EAAU,IAAA,EAAM,MAAA;AAAA,MAC5B,KAAA,EAAO,KAAA,CAAM,QAAA,EAAU,KAAA,EAAO;AAAA,KAChC;AAAA,IACA,SAAS,MAAA,CAAO,OAAA,CAAQ,MAAM,OAAA,IAAW,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,MAAM,CAAA,KAAM,aAAA,CAAc,MAAM,KAAA,EAAO,IAAA,EAAM,MAAM,CAAC;AAAA,GAC/G;AACF;AAEA,SAAS,aAAA,CAAc,MAAc,MAAA,EAA0B;AAG7D,EAAA,MAAM,WAAA,GAAc,OAAO,OAAA,KAAY,MAAA,IAAa,kBAAkB,MAAA,CAAO,OAAA,EAAS,OAAO,IAAI,CAAA;AACjG,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,UAAA,EAAY,IAAA;AAAA,IACZ,MAAM,MAAA,CAAO,IAAA;AAAA,IACb,QAAA,EAAU,MAAA,CAAO,WAAA,GAAc,KAAA,GAAQ,OAAO,QAAA,KAAa,KAAA;AAAA,IAC3D,MAAA,EAAQ,OAAO,MAAA,KAAW,IAAA;AAAA,IAC1B,OAAA,EAAS,WAAA,GAAc,MAAA,GAAY,MAAA,CAAO,OAAA;AAAA;AAAA;AAAA,IAG1C,SAAA,EAAW,WAAA,GAAc,MAAA,CAAO,OAAA,GAAU,MAAA;AAAA,IAC1C,aAAa,MAAA,CAAO,WAAA;AAAA,IACpB,aAAa,MAAA,CAAO,YAAA;AAAA,IACpB,MAAM,MAAA,CAAO,IAAA;AAAA,IACb,UAAA,EAAY,OAAO,UAAA,KAAe;AAAA,GACpC;AACF;AAEA,SAAS,WAAA,CAAY,KAAA,EAAe,IAAA,EAAc,IAAA,EAA+C;AAC/F,EAAA,IAAI,IAAA,CAAK,EAAA,CAAG,QAAA,CAAS,GAAG,CAAA,EAAG;AACzB,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,SAAS,IAAI,CAAA,MAAA,EAAS,KAAK,CAAA,WAAA,EAAc,KAAK,EAAE,CAAA,oGAAA;AAAA,KAClD;AAAA,EACF;AAGA,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,IAAA,EAAM,OAAA;AAAA,IACN,QAAQ,IAAA,CAAK,EAAA;AAAA,IACb,IAAI,IAAA,CAAK,EAAA;AAAA,IACT,OAAA,EAAS,KAAK,OAAA,KAAY,IAAA;AAAA,IAC1B,aAAa,IAAA,CAAK;AAAA,GACpB;AACF;AAEA,SAAS,aAAA,CAAc,KAAA,EAAe,IAAA,EAAc,MAAA,EAA0B;AAC5E,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,QAAA,EAAU,OAAO,QAAA,EAAU,MAAA;AAAA,IAC3B,QAAQ,MAAA,CAAO,WAAA;AAAA,MACb,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,MAAA,IAAU,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,KAAA,EAAO,UAAU,CAAA,KAAM;AAAA,QAC/D,KAAA;AAAA,QACA,EAAE,IAAA,EAAM,UAAA,CAAW,MAAM,QAAA,EAAU,UAAA,CAAW,aAAa,IAAA;AAAK,OACjE;AAAA,KACH;AAAA;AAAA;AAAA,IAGA,UAAU,sBAAA,CAAuB,MAAA,CAAO,QAAQ,CAAA,CAAE,KAAK,KAAK,CAAA;AAAA;AAAA;AAAA,IAG5D,OAAA,EAAS,MAAA,CAAO,OAAA,GAAW,MAAA,GAAoB,cAAA;AAAA,IAC/C,KAAA,EAAO,MAAA,CAAO,KAAA,GAAQ,EAAE,MAAA,EAAQ,MAAA,CAAO,KAAA,CAAM,MAAA,EAAQ,QAAA,EAAU,MAAA,CAAO,KAAA,CAAM,QAAA,IAAY,OAAM,GAAI;AAAA,GACpG;AACF;;;ACtHA,IAAM,UAAA,GAAa,gBAAA;AAcZ,SAAS,gBAAA,CACd,YACA,OAAA,EACqB;AACrB,EAAA,MAAM,aAAA,GAAgB,SAAS,uBAAA,IAA2B,KAAA;AAC1D,EAAA,OAAO,UAAA,CAAW,OAAO,CAAC,SAAA,KAAc,EAAE,SAAA,CAAU,IAAA,KAAS,cAAc,aAAA,CAAc,CAAA;AAC3F;AAOO,IAAM,kBAAA,GAAqB,CAChC,IAAA,EACA,OAAA,KACY,iBAAiB,IAAA,CAAK,UAAA,EAAY,OAAO,CAAA,CAAE,MAAA,KAAW;AAkC7D,SAAS,wBAAwB,EAAE,SAAA,EAAW,cAAc,OAAA,EAAS,OAAA,EAAS,UAAS,EAAkC;AAC9H,EAAA,IAAI,CAAC,UAAA,CAAW,IAAA,CAAK,YAAY,CAAA,EAAG;AAClC,IAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,iDAAA,EAAoD,YAAY,CAAA,CAAA,CAAG,CAAA;AAAA,EAClG;AACA,EAAA,IAAI,CAAC,UAAA,CAAW,IAAA,CAAK,OAAO,CAAA,EAAG;AAC7B,IAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,4CAAA,EAA+C,OAAO,CAAA,CAAA,CAAG,CAAA;AAAA,EACxF;AACA,EAAA,IAAI,iBAAiB,OAAA,EAAS;AAC5B,IAAA,MAAM,IAAI,mBAAmB,wEAAmE,CAAA;AAAA,EAClG;AACA,EAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,OAAO,CAAA,IAAK,UAAU,CAAA,EAAG;AAC7C,IAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,2FAAA,EAAyF,OAAO,CAAA,CAAE,CAAA;AAAA,EACjI;AAEA,EAAA,MAAM,IAAA,GAAO,aAAA,CAAc,OAAA,EAAS,OAAO,CAAA;AAC3C,EAAA,MAAMY,OAAM,wBAAA,CAAyB,EAAE,MAAM,SAAA,EAAW,YAAA,EAAc,SAAS,CAAA;AAC/E,EAAA,MAAM,eAAe,CAAA,EAAG,IAAA,CAAK,UAAU,QAAA,EAAU,IAAA,EAAM,CAAC,CAAC;AAAA,CAAA;AAEzD,EAAA,MAAM,KAAA,GAAsB;AAAA,IAC1B,OAAA;AAAA,IACA,IAAA;AAAA,IACA,YAAA,EAAc,OAAA;AAAA,IACd,qBAAA,EAAuB,YAAA;AAAA,IACvB,QAAA,EAAU,WAAWA,IAAG,CAAA;AAAA,IACxB,iBAAA,EAAmB,WAAW,YAAY,CAAA;AAAA,IAC1C,WAAA,EAAa;AAAA,GACf;AACA,EAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,GAAA,EAAAA,MAAK,YAAA,EAAa;AAC1C;AAGA,SAAS,wBAAA,CAAyB;AAAA,EAChC,IAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,EAKW;AACT,EAAA,OACE;AAAA,IACE,MAAM,IAAI,CAAA,CAAA;AAAA,IACV,iBAAiB,SAAS,CAAA,CAAA;AAAA,IAC1B,oBAAoB,OAAO,CAAA,CAAA;AAAA,IAC3B,8BAA8B,YAAY,CAAA,kEAAA,CAAA;AAAA,IAC1C;AAAA,GACF,CAAE,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA;AAEnB;;;ACrHO,SAAS,yBAAyB,KAAA,EAAqC;AAC5E,EAAA,MAAM,SAAA,GAAY,iBAAiB,KAAK,CAAA;AACxC,EAAA,MAAM,QAAQ,SAAA,CAAU,MAAA,CAAO,GAAA,CAAI,CAAC,OAAOZ,MAAAA,KAAU;AACnD,IAAA,MAAM,KAAA,GAAQ;AAAA,MACZ,WAAW,SAAA,CAAU,SAAA;AAAA,MACrB,KAAA,EAAO,MAAM,OAAO,CAAA;AAAA,MACpB,WAAA,EAAa,KAAA,CAAM,aAAa,CAAA,IAAK,MAAA;AAAA,MACrC,OAAA,EAAS,KAAA,CAAM,SAAS,CAAA,IAAK,MAAA;AAAA,MAC7B,MAAA,EAAQ,KAAA,CAAM,QAAQ,CAAA,IAAK,MAAA;AAAA,MAC3B,KAAA,EAAO,KAAA,CAAM,OAAO,CAAA,IAAK,MAAA;AAAA,MACzB,OAAA,EAAS,KAAA,CAAM,SAAS,CAAA,IAAK,MAAA;AAAA,MAC7B,QAAA,EAAU,iBAAA,CAAkB,KAAA,CAAM,UAAU,CAAC,CAAA;AAAA,MAC7C,OAAA,EAAS,gBAAA,CAAiB,KAAA,CAAM,SAAS,CAAC;AAAA,KAC5C;AACA,IAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,SAAA,CAAU,KAAK,CAAA;AAC9C,IAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA;AACnC,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,CAAA,4BAAA,EAA+B,OAAO,KAAA,CAAM,OAAO,CAAC,CAAC,CAAA,aAAA,EAAgB,KAAA,EAAO,OAAA,IAAW,eAAe,CAAA,CAAA;AAAA,QACtG,aAAaA,MAAK,CAAA,CAAA;AAAA,OACpB;AAAA,IACF;AACA,IAAA,OAAO,EAAE,IAAA,EAAM,CAAA,UAAA,EAAaA,MAAK,CAAA,CAAA,CAAA,EAAK,KAAA,EAAO,OAAO,IAAA,EAAK;AAAA,EAC3D,CAAC,CAAA;AAID,EAAA,MAAM,MAAA,GAAS,sBAAsB,SAAA,CAAU;AAAA,IAC7C,WAAW,SAAA,CAAU,SAAA;AAAA,IACrB,WAAA,EAAa,UAAU,WAAA,IAAe,MAAA;AAAA,IACtC,YAAA,EAAc,UAAU,YAAA,IAAgB;AAAA,GACzC,CAAA;AACD,EAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA;AACnC,IAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,oCAAA,EAAuC,OAAO,OAAA,IAAW,eAAe,IAAI,WAAW,CAAA;AAAA,EACtH;AACA,EAAA,OAAO,wBAAA,CAAyB,KAAA,EAAO,MAAA,CAAO,IAAI,CAAA;AACpD;AAEA,SAAS,iBAAiB,KAAA,EAAgC;AACxD,EAAA,IAAI,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,YAAY,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACvE,IAAA,MAAM,IAAI,mBAAmB,oCAAoC,CAAA;AAAA,EACnE;AACA,EAAA,MAAM,MAAA,GAAS,KAAA;AACf,EAAA,IAAI,OAAO,MAAA,CAAO,WAAW,CAAA,KAAM,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,QAAQ,CAAC,CAAA,EAAG;AAC/E,IAAA,MAAM,IAAI,mBAAmB,+CAA+C,CAAA;AAAA,EAC9E;AACA,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,OAAO,WAAW,CAAA;AAAA;AAAA,IAE7B,WAAA,EAAa,OAAO,MAAA,CAAO,aAAa,MAAM,QAAA,GAAW,MAAA,CAAO,aAAa,CAAA,GAAI,IAAA;AAAA,IACjF,YAAA,EAAc,MAAA,CAAO,cAAc,CAAA,IAAK,MAAA;AAAA,IACxC,MAAA,EAAQ,OAAO,QAAQ;AAAA,GACzB;AACF;AAEA,SAAS,kBAAkB,KAAA,EAAqD;AAC9E,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,MAAA;AACxD,EAAA,MAAM,MAAA,GAAS,KAAA;AACf,EAAA,MAAM,WAAoC,EAAC;AAC3C,EAAA,IAAI,OAAO,OAAO,MAAM,CAAA,KAAM,UAAU,QAAA,CAAS,MAAM,CAAA,GAAI,MAAA,CAAO,MAAM,CAAA;AACxE,EAAA,IAAI,OAAO,OAAO,OAAO,CAAA,KAAM,UAAU,QAAA,CAAS,OAAO,CAAA,GAAI,MAAA,CAAO,OAAO,CAAA;AAC3E,EAAA,OAAO,OAAO,IAAA,CAAK,QAAQ,CAAA,CAAE,MAAA,GAAS,IAAI,QAAA,GAAW,MAAA;AACvD;AAEA,SAAS,iBAAiB,KAAA,EAAqD;AAC7E,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,MAAA;AACxD,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,KAAgD,CAAA;AAC/E,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,MAAA;AACjC,EAAA,OAAO,MAAA,CAAO,WAAA;AAAA,IACZ,QAAQ,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,MAAM,CAAA,KAAM;AAAA,MAC9B,IAAA;AAAA,MACA;AAAA,QACE,WAAA,EAAa,MAAA,CAAO,aAAa,CAAA,IAAK,MAAA;AAAA,QACtC,QAAA,EAAU,MAAA,CAAO,UAAU,CAAA,IAAK,MAAA;AAAA,QAChC,MAAA,EAAQ,MAAA,CAAO,QAAQ,CAAA,IAAK,MAAA;AAAA,QAC5B,SAAA,EAAW,MAAA,CAAO,WAAW,CAAA,IAAK,MAAA;AAAA,QAClC,QAAA,EAAU,OAAO,UAAU,CAAA;AAAA,QAC3B,OAAA,EAAS,MAAA,CAAO,SAAS,CAAA,IAAK,MAAA;AAAA,QAC9B,KAAA,EAAO,MAAA,CAAO,OAAO,CAAA,IAAK;AAAA;AAC5B,KACD;AAAA,GACH;AACF","file":"index.cjs","sourcesContent":["/**\n * Fluent column builders for the v2 authoring surface — `t.uuid()`,\n * `t.text().notNull().unique()`, `t.enum(status).default('open')`, …\n *\n * Builders carry plain serializable state and produce `CanonicalColumn` data\n * (canonical definition v2). They never touch Drizzle: the server builds\n * Drizzle entities from canonical JSON, consumer TypeScript never runs\n * server-side (plan §2).\n *\n * Cross-copy safety: the jiti loader evaluates its own transpiled copy of\n * this module, so identification uses the `kind` brand — never `instanceof`.\n */\nimport type { CanonicalColumn, ColumnType } from '../canonical/v2.js'\n\nexport const COLUMN_BRAND = 'seq-column' as const\nexport const ENUM_BRAND = 'seq-enum' as const\n\n/** A namespace-level Postgres enum, created with `defineEnum` (table.ts). */\nexport interface EnumRef {\n readonly kind: typeof ENUM_BRAND\n readonly name: string\n readonly values: readonly string[]\n}\n\nexport function isEnumRef(value: unknown): value is EnumRef {\n return typeof value === 'object' && value !== null && (value as { kind?: unknown }).kind === ENUM_BRAND\n}\n\n/** The allowlisted SQL default functions — `.default('now()')` maps here, not to a literal. */\nexport const COLUMN_DEFAULT_FNS = ['gen_random_uuid()', 'now()'] as const\nexport type ColumnDefaultFn = (typeof COLUMN_DEFAULT_FNS)[number]\n\nexport type ColumnDefaultLiteral = string | number | boolean | null\n\nexport type ColumnTypeSpec = ColumnType | { readonly enum: string }\n\n/** `authorSub` → `author_sub`, `authorURLPath` → `author_url_path`. */\nexport function deriveColumnName(propertyName: string): string {\n return propertyName\n .replace(/([a-z0-9])([A-Z])/g, '$1_$2')\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')\n .toLowerCase()\n}\n\ninterface ColumnState {\n type: ColumnTypeSpec\n columnName: string | undefined\n primaryKey: boolean\n notNull: boolean\n unique: boolean\n hasDefault: boolean\n defaultValue: ColumnDefaultLiteral | undefined\n defaultFn: ColumnDefaultFn | undefined\n description: string | undefined\n renamedFrom: string | undefined\n cast: string | undefined\n deprecated: boolean\n}\n\nexport class ColumnBuilder {\n readonly kind = COLUMN_BRAND\n\n private readonly state: ColumnState\n\n constructor(type: ColumnTypeSpec, columnName?: string) {\n this.state = {\n type,\n columnName,\n primaryKey: false,\n notNull: false,\n unique: false,\n hasDefault: false,\n defaultValue: undefined,\n defaultFn: undefined,\n description: undefined,\n renamedFrom: undefined,\n cast: undefined,\n deprecated: false,\n }\n }\n\n /** Marks this column as (part of) the primary key. Implies NOT NULL. */\n primaryKey(): this {\n this.state.primaryKey = true\n return this\n }\n\n notNull(): this {\n this.state.notNull = true\n return this\n }\n\n unique(): this {\n this.state.unique = true\n return this\n }\n\n /**\n * Column default: a literal, or one of the allowlisted SQL functions\n * (`'gen_random_uuid()'` / `'now()'`), which serialize as `defaultFn`.\n */\n default(value: ColumnDefaultLiteral): this {\n if (value === 'gen_random_uuid()' || value === 'now()') {\n this.state.defaultFn = value\n this.state.hasDefault = false\n this.state.defaultValue = undefined\n return this\n }\n this.state.hasDefault = true\n this.state.defaultValue = value\n this.state.defaultFn = undefined\n return this\n }\n\n description(text: string): this {\n this.state.description = text\n return this\n }\n\n /** Migration rename hint: the previous Postgres column name. */\n renamedFrom(previousColumnName: string): this {\n this.state.renamedFrom = previousColumnName\n return this\n }\n\n /** Migration cast hint: the `USING` SQL applied when this column changes type. */\n cast(usingSql: string): this {\n this.state.cast = usingSql\n return this\n }\n\n /** Emits `@deprecated` in the generated SDL; the column stays queryable. */\n deprecated(): this {\n this.state.deprecated = true\n return this\n }\n\n /** Whether `.primaryKey()` was called — collected into the table-level PK. */\n get isPrimaryKey(): boolean {\n return this.state.primaryKey\n }\n\n /** The enum name when this is an enum column, else undefined. */\n get enumName(): string | undefined {\n return typeof this.state.type === 'object' ? this.state.type.enum : undefined\n }\n\n /** Postgres column name: explicit override, else snake_case of the property name. */\n columnNameFor(propertyName: string): string {\n return this.state.columnName ?? deriveColumnName(propertyName)\n }\n\n /** Serialize to a canonical v2 column. Validation happens in serializeNamespace. */\n toCanonicalColumn(propertyName: string): CanonicalColumn {\n const column: CanonicalColumn = {\n name: propertyName,\n columnName: this.columnNameFor(propertyName),\n type: typeof this.state.type === 'object' ? { enum: this.state.type.enum } : this.state.type,\n nullable: !(this.state.notNull || this.state.primaryKey),\n unique: this.state.unique,\n deprecated: this.state.deprecated,\n }\n if (this.state.hasDefault) column.default = this.state.defaultValue ?? null\n if (this.state.defaultFn !== undefined) column.defaultFn = this.state.defaultFn\n if (this.state.description !== undefined) column.description = this.state.description\n if (this.state.renamedFrom !== undefined) column.renamedFrom = this.state.renamedFrom\n if (this.state.cast !== undefined) column.cast = this.state.cast\n return column\n }\n}\n\nexport function isColumnBuilder(value: unknown): value is ColumnBuilder {\n return typeof value === 'object' && value !== null && (value as { kind?: unknown }).kind === COLUMN_BRAND\n}\n\nconst scalar =\n (type: ColumnType) =>\n (columnName?: string): ColumnBuilder =>\n new ColumnBuilder(type, columnName)\n\n/**\n * The column-type factory. The optional argument overrides the derived\n * snake_case Postgres column name: `t.text('legacy_name')`.\n */\nexport const t = {\n uuid: scalar('uuid'),\n text: scalar('text'),\n integer: scalar('integer'),\n bigint: scalar('bigint'),\n numeric: scalar('numeric'),\n double: scalar('double'),\n boolean: scalar('boolean'),\n timestamptz: scalar('timestamptz'),\n date: scalar('date'),\n jsonb: scalar('jsonb'),\n enum: (ref: EnumRef, columnName?: string): ColumnBuilder => new ColumnBuilder({ enum: ref.name }, columnName),\n} as const\n","/** Namespace names become Postgres identifiers (`orm_<ns>` schema, `orm_<ns>_consumer` role) — the tight grammar is a security control, not cosmetics. */\nexport const NAMESPACE_PATTERN = /^[a-z][a-z0-9_]{0,40}$/\n\nexport const IDENTIFIER_PATTERN = /^[a-z][a-z0-9_]*$/\nexport const MAX_IDENTIFIER_LENGTH = 63\n\n/**\n * The Data API carries a delegated, attenuated data token on this header (not\n * `Authorization`, which stays the app-user/session bearer). One definition\n * shared by the client transport, the server's caller resolver, and the\n * function-invoke minter, so all three agree.\n */\nexport const ORM_DATA_TOKEN_HEADER = 'x-sequence-data-token'\n\n/**\n * The SEPARATE header the invoke proxy uses to hand a managed function its\n * *service* data token — the escalation path. A function receives BOTH this and\n * `ORM_DATA_TOKEN_HEADER`; the default `createOrmClient` reads the user token,\n * the deliberately-named `createServiceOrmClient` reads THIS one. Two distinct\n * headers so reaching for the service identity is always an explicit act, never\n * an accidental default. Both are sent to the Data API on `ORM_DATA_TOKEN_HEADER`\n * — the server stays mode-agnostic and resolves whatever sub the token carries.\n */\nexport const ORM_SERVICE_DATA_TOKEN_HEADER = 'x-sequence-data-token-service'\n\n/**\n * Custom Roles & Capabilities claim keys as policies reference them: a\n * host-scoped registry key, or an org pin's `org/<key>`. Matches the registry\n * key grammar EXACTLY (`[a-z0-9-]`, 1–64 chars, no `_` — the FGA object-id\n * delimiter) so any capability that's declarable/attachable in namespace.yaml\n * can also be referenced here — a stricter pattern would let a valid key\n * register yet fail at apply (e.g. `org/2fa`, a one-char or digit-led key).\n */\nexport const CAPABILITY_KEY_PATTERN = /^(?:org\\/)?[a-z0-9-]{1,64}$/\n\nexport const CLAIM_KEY_PATTERN = /^[a-z][a-z0-9_]*$/\n\n/** Qualified reference to a table outside the defining file: `<schema>.<table>`. */\nexport const QUALIFIED_TABLE_PATTERN = /^[a-z][a-z0-9_]*\\.[a-z][a-z0-9_]*$/\n\n/** Synced reflected sources are restricted to the gold layer. */\nexport const SYNCED_SOURCE_PATTERN = /^gold\\.[a-z][a-z0-9_]*$/\n\nexport const ORM_SCHEMA_PREFIX = 'orm_'\nexport const CONSUMER_ROLE_SUFFIX = '_consumer'\n\nexport const ormSchemaName = (namespace: string): string => `${ORM_SCHEMA_PREFIX}${namespace}`\nexport const consumerRoleName = (namespace: string): string =>\n `${ORM_SCHEMA_PREFIX}${namespace}${CONSUMER_ROLE_SUFFIX}`\n\nexport const DEFINITION_FILE_EXTENSIONS = ['.yml', '.yaml'] as const\n\n/** Reserved basenames for the namespace-level config file (description, org capability pins). */\nexport const NAMESPACE_CONFIG_FILENAMES = new Set(['namespace.yaml', 'namespace.yml'])\n\nexport const HASH_DOMAIN = 'sequence-orm-definitions\\0'\n\n/**\n * The one size guard the package owns: a per-file byte cap where the loader\n * reads untrusted YAML into memory — a real failure mode, not a product\n * limit. Counts of tables/indexes/params and policy/SQL lengths are\n * deliberately uncapped; Postgres enforces its own limits loudly at apply.\n */\nexport const MAX_DEFINITION_FILE_BYTES = 1024 * 1024\n\n/** `/api/data/<ns>/actions/…` and `/api/data/<ns>/query` share the table path segment. */\nexport const RESERVED_TABLE_NAMES = new Set(['actions', 'query'])\n\n/**\n * The Data API's query-string grammar owns these parameter names — a column\n * with one of them could never be filtered over the wire, so definitions\n * refuse it up front (\"validate rejects only what can never work\").\n */\nexport const RESERVED_COLUMN_NAMES = new Set(['select', 'order', 'limit', 'offset'])\n","export class OrmDefinitionError extends Error {\n override readonly name = 'OrmDefinitionError'\n\n constructor(\n message: string,\n readonly file?: string,\n ) {\n super(file ? `${file}: ${message}` : message)\n }\n}\n\nexport class PredicateParseError extends Error {\n override readonly name = 'PredicateParseError'\n\n constructor(\n message: string,\n readonly position: number,\n ) {\n super(`${message} (at position ${position})`)\n }\n}\n","/**\n * Module-registry pattern for the authoring surface: `defineTable` /\n * `defineEnum` / `defineNamespace` register into the ACTIVE collection\n * context while `loadNamespaceFromDir` imports a consumer's files, so the\n * loader collects definitions without inspecting module exports.\n *\n * The context stack lives on `globalThis` under a `Symbol.for` key — NOT in\n * module scope — because the jiti loader evaluates its own transpiled copy of\n * this module when a consumer file imports '@sequenceholdings/orm'. Both\n * copies must observe the same registrations (the graphql-js dual-package\n * discipline), so everything registered is plain data identified by `kind`\n * brand strings, never `instanceof`.\n */\n\nexport interface AuthoringRegistration {\n readonly value: unknown\n readonly file: string | undefined\n}\n\nexport interface AuthoringContext {\n /** Set by the loader before importing each consumer file — error attribution. */\n currentFile: string | undefined\n readonly tables: AuthoringRegistration[]\n readonly enums: AuthoringRegistration[]\n readonly configs: AuthoringRegistration[]\n}\n\nconst CONTEXT_STACK_KEY = Symbol.for('sequence.orm.authoring.context-stack.v2')\n\nfunction contextStack(): AuthoringContext[] {\n const holder = globalThis as { [key: symbol]: unknown }\n const existing = holder[CONTEXT_STACK_KEY]\n if (Array.isArray(existing)) {\n // The slot is only ever written by this function with an AuthoringContext[];\n // the cast re-attaches the type the untyped global slot cannot carry.\n return existing as AuthoringContext[]\n }\n const created: AuthoringContext[] = []\n holder[CONTEXT_STACK_KEY] = created\n return created\n}\n\n/** Push a fresh collection context; every define* call registers into it until ended. */\nexport function beginAuthoringContext(): AuthoringContext {\n const context: AuthoringContext = { currentFile: undefined, tables: [], enums: [], configs: [] }\n contextStack().push(context)\n return context\n}\n\n/** Pop the context; throws if collection begin/end calls are mismatched (programmer error). */\nexport function endAuthoringContext(context: AuthoringContext): void {\n const stack = contextStack()\n const top = stack[stack.length - 1]\n if (top !== context) {\n throw new Error('endAuthoringContext: the given context is not the active one — begin/end calls are mismatched')\n }\n stack.pop()\n}\n\nexport function activeAuthoringContext(): AuthoringContext | undefined {\n const stack = contextStack()\n return stack[stack.length - 1]\n}\n\nfunction register(bucket: keyof Pick<AuthoringContext, 'tables' | 'enums' | 'configs'>, value: unknown): void {\n const context = activeAuthoringContext()\n if (!context) return\n context[bucket].push({ value, file: context.currentFile })\n}\n\nexport function registerTable(value: unknown): void {\n register('tables', value)\n}\n\nexport function registerEnum(value: unknown): void {\n register('enums', value)\n}\n\nexport function registerNamespaceConfig(value: unknown): void {\n register('configs', value)\n}\n","/**\n * `defineTable` / `defineSyncedTable` / `defineEnum` and the link factories\n * (`toOne` / `toMany` / `toPlatformUser`) — the consumer-facing table layer\n * of the v2 authoring surface.\n *\n * Tables are plain-data descriptors (`SeqTable`) carrying builder state;\n * `serializeNamespace` (namespace.ts) turns them into canonical definition\n * v2. Link targets accept lazy `() => table` thunks so mutually-referencing\n * tables can live in any file order (cycles resolve at serialize time).\n */\nimport { IDENTIFIER_PATTERN, MAX_IDENTIFIER_LENGTH, SYNCED_SOURCE_PATTERN } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { ENUM_BRAND, isColumnBuilder, type ColumnBuilder, type EnumRef } from './columns.js'\nimport { activeAuthoringContext, registerEnum, registerTable } from './registry.js'\nimport type { ColumnType } from '../canonical/v2.js'\n\nexport const TABLE_BRAND = 'seq-table' as const\nexport const LINK_BRAND = 'seq-link' as const\n\n// ---------------------------------------------------------------------------\n// Links\n// ---------------------------------------------------------------------------\n\n/** A link target: the table itself, or a lazy thunk for forward/cyclic references. */\nexport type TableRef = SeqTable | (() => SeqTable)\n\nexport type LinkKind = 'toOne' | 'toMany' | 'toPlatformUser'\n\nexport interface SeqLink {\n readonly kind: typeof LINK_BRAND\n readonly linkKind: LinkKind\n /** Absent for toPlatformUser — the platform-users view needs no target. */\n readonly target: TableRef | undefined\n /** FK column (property or column name). toOne/toPlatformUser: on this table; toMany: on the target. */\n readonly on: string\n readonly references: string | undefined\n readonly enforce: boolean\n readonly description: string | undefined\n}\n\nexport interface ToOneOptions {\n on: string\n references?: string\n /** Emit a real FK constraint (same-namespace toOne only). */\n enforce?: boolean\n description?: string\n}\n\nexport interface ToManyOptions {\n on: string\n references?: string\n description?: string\n}\n\nexport interface ToPlatformUserOptions {\n /** Column on this table holding the platform user `sub` (or `references` override). */\n on: string\n references?: string\n description?: string\n}\n\nexport function toOne(target: TableRef, options: ToOneOptions): SeqLink {\n return {\n kind: LINK_BRAND,\n linkKind: 'toOne',\n target,\n on: options.on,\n references: options.references,\n enforce: options.enforce ?? false,\n description: options.description,\n }\n}\n\nexport function toMany(target: TableRef, options: ToManyOptions): SeqLink {\n return {\n kind: LINK_BRAND,\n linkKind: 'toMany',\n target,\n on: options.on,\n references: options.references,\n enforce: false,\n description: options.description,\n }\n}\n\n/** Link to the built-in read-only platform-users view (plan §4b) — no table definition needed. */\nexport function toPlatformUser(options: ToPlatformUserOptions): SeqLink {\n return {\n kind: LINK_BRAND,\n linkKind: 'toPlatformUser',\n target: undefined,\n on: options.on,\n references: options.references,\n enforce: false,\n description: options.description,\n }\n}\n\nexport function isSeqLink(value: unknown): value is SeqLink {\n return typeof value === 'object' && value !== null && (value as { kind?: unknown }).kind === LINK_BRAND\n}\n\n// ---------------------------------------------------------------------------\n// Policies / indexes / actions (authoring input shapes)\n// ---------------------------------------------------------------------------\n\nexport interface PolicyVariantInput {\n /** Claims-only guard: `capability('x')` / `role('y')` / claim comparisons. */\n when: string\n /** Exactly one of `allow: true` or `policy` (validated at serialize time). */\n allow?: true\n policy?: string\n}\n\nexport interface PolicyWithVariantsInput {\n default: string\n variants?: readonly PolicyVariantInput[]\n}\n\n/** A policy: a DSL source string, or a default + per-role/capability variants (§4c). */\nexport type PolicyInput = string | PolicyWithVariantsInput\n\nexport interface TablePoliciesInput {\n read?: PolicyInput\n write?: PolicyInput\n}\n\nexport interface IndexInput {\n /** Property names (camelCase) or Postgres column names. */\n columns: readonly string[]\n unique?: boolean\n name?: string\n}\n\nexport interface ActionParamInput {\n type: ColumnType\n nullable?: boolean\n}\n\nexport interface ActionInput {\n name: string\n requires?: string\n params?: Record<string, ActionParamInput>\n executes: string\n returns?: 'rows' | 'rowsAffected' | 'scalar'\n audit?: { action: string; resource: string }\n}\n\nexport interface TableConfig {\n description?: string\n /** Table-level migration rename hint (new in v2). */\n renamedFrom?: string\n /** Composite primary key: property names (or column names). Mutually exclusive with column-level `.primaryKey()`. */\n primaryKey?: readonly string[]\n indexes?: readonly IndexInput[]\n links?: Record<string, SeqLink>\n policies?: TablePoliciesInput\n actions?: readonly ActionInput[]\n}\n\n// ---------------------------------------------------------------------------\n// Tables\n// ---------------------------------------------------------------------------\n\nexport interface SeqTable {\n readonly kind: typeof TABLE_BRAND\n readonly tableName: string\n readonly columns: Readonly<Record<string, ColumnBuilder>>\n readonly config: TableConfig\n /** Synced reflected source (`gold.*`) — set only by defineSyncedTable. */\n readonly source: string | undefined\n /** Consumer file that defined the table (set when loaded via loadNamespaceFromDir). */\n readonly file: string | undefined\n}\n\nexport function isSeqTable(value: unknown): value is SeqTable {\n return typeof value === 'object' && value !== null && (value as { kind?: unknown }).kind === TABLE_BRAND\n}\n\nfunction assertIdentifier({ value, what, file }: { value: string; what: string; file: string | undefined }): void {\n if (!IDENTIFIER_PATTERN.test(value) || value.length > MAX_IDENTIFIER_LENGTH) {\n throw new OrmDefinitionError(\n `${what} \"${value}\" must match ${IDENTIFIER_PATTERN} and be at most ${MAX_IDENTIFIER_LENGTH} characters`,\n file,\n )\n }\n}\n\nexport function defineTable(\n name: string,\n columns: Record<string, ColumnBuilder>,\n config: TableConfig = {},\n): SeqTable {\n const file = activeAuthoringContext()?.currentFile\n assertIdentifier({ value: name, what: 'table name', file })\n\n const entries = Object.entries(columns)\n if (entries.length === 0) {\n throw new OrmDefinitionError(`table \"${name}\" declares no columns`, file)\n }\n\n const seenColumnNames = new Map<string, string>()\n for (const [propertyName, builder] of entries) {\n if (!isColumnBuilder(builder)) {\n throw new OrmDefinitionError(\n `table \"${name}\": column \"${propertyName}\" is not a column builder — use the t.* factories (t.uuid(), t.text(), …)`,\n file,\n )\n }\n const columnName = builder.columnNameFor(propertyName)\n assertIdentifier({ value: columnName, what: `table \"${name}\": column \"${propertyName}\" column name`, file })\n const existing = seenColumnNames.get(columnName)\n if (existing !== undefined) {\n throw new OrmDefinitionError(\n `table \"${name}\": columns \"${existing}\" and \"${propertyName}\" both map to Postgres column \"${columnName}\"`,\n file,\n )\n }\n seenColumnNames.set(columnName, propertyName)\n }\n\n const table: SeqTable = { kind: TABLE_BRAND, tableName: name, columns, config, source: undefined, file }\n registerTable(table)\n return table\n}\n\nexport interface SyncedTableConfig {\n /** Reflected read-only source, restricted to the gold layer: `gold.<table>`. */\n source: string\n description?: string\n}\n\nexport function defineSyncedTable(name: string, config: SyncedTableConfig): SeqTable {\n const file = activeAuthoringContext()?.currentFile\n assertIdentifier({ value: name, what: 'table name', file })\n if (!SYNCED_SOURCE_PATTERN.test(config.source)) {\n throw new OrmDefinitionError(\n `synced table \"${name}\": source \"${config.source}\" must match ${SYNCED_SOURCE_PATTERN} (gold layer only)`,\n file,\n )\n }\n const table: SeqTable = {\n kind: TABLE_BRAND,\n tableName: name,\n columns: {},\n config: config.description !== undefined ? { description: config.description } : {},\n source: config.source,\n file,\n }\n registerTable(table)\n return table\n}\n\n// ---------------------------------------------------------------------------\n// Enums\n// ---------------------------------------------------------------------------\n\nexport function defineEnum(name: string, values: readonly string[]): EnumRef {\n const file = activeAuthoringContext()?.currentFile\n assertIdentifier({ value: name, what: 'enum name', file })\n if (values.length === 0 || values.length > 100) {\n throw new OrmDefinitionError(`enum \"${name}\" must declare between 1 and 100 values`, file)\n }\n const seen = new Set<string>()\n for (const value of values) {\n if (value.length === 0 || value.length > MAX_IDENTIFIER_LENGTH) {\n throw new OrmDefinitionError(\n `enum \"${name}\": value ${JSON.stringify(value)} must be 1-${MAX_IDENTIFIER_LENGTH} characters`,\n file,\n )\n }\n if (seen.has(value)) {\n throw new OrmDefinitionError(`enum \"${name}\" declares duplicate value \"${value}\"`, file)\n }\n seen.add(value)\n }\n const ref: EnumRef = { kind: ENUM_BRAND, name, values: [...values] }\n registerEnum(ref)\n return ref\n}\n","/**\n * Canonical namespace definition v2 — the data-only JSON a consumer's\n * TypeScript schema serializes to. This is v2's equivalent of the v1 YAML\n * `NamespaceDefinition`: the CLI's jiti loader produces it, the content hash\n * is computed over it, the server re-validates it (consumer TS never runs\n * server-side), and the SDL generator / GraphQL compiler / migration engine\n * all consume it.\n *\n * FROZEN CONTRACT (week 1): downstream tracks build against these shapes.\n * Additive evolution only; `definition_format` discriminates on the wire.\n */\nimport { z } from 'zod'\n\nexport const CANONICAL_FORMAT = 2 as const\n\n/** Identifier grammar shared with v1 (`^[a-z][a-z0-9_]*$`, ≤63 bytes). */\nexport const IDENTIFIER_RE = /^[a-z][a-z0-9_]*$/\nconst identifier = z.string().min(1).max(63).regex(IDENTIFIER_RE)\n\n/** The 10 v1 column types, unchanged in v2. */\nexport const COLUMN_TYPES = [\n 'uuid', 'text', 'integer', 'bigint', 'numeric', 'double',\n 'boolean', 'timestamptz', 'date', 'jsonb',\n] as const\nexport type ColumnType = (typeof COLUMN_TYPES)[number]\n\nconst columnTypeSchema = z.enum(COLUMN_TYPES)\n\n/** Enum columns reference a namespace-level `defineEnum` by name. */\nexport const canonicalEnumSchema = z.object({\n name: identifier,\n values: z.array(z.string().min(1).max(63)).min(1).max(100),\n})\nexport type CanonicalEnum = z.infer<typeof canonicalEnumSchema>\n\nexport const canonicalColumnSchema = z.object({\n /** Property name in TS (camelCase); columnName is the Postgres name. */\n name: z.string().min(1).max(63),\n columnName: identifier,\n type: z.union([columnTypeSchema, z.object({ enum: identifier })]),\n nullable: z.boolean().default(true),\n unique: z.boolean().default(false),\n /** Literal default, or one of the allowlisted SQL functions. */\n default: z.union([z.string(), z.number(), z.boolean(), z.null()]).optional(),\n defaultFn: z.enum(['gen_random_uuid()', 'now()']).optional(),\n description: z.string().max(500).optional(),\n /** Migration hints — same semantics as v1. */\n renamedFrom: identifier.optional(),\n cast: z.string().max(200).optional(),\n deprecated: z.boolean().default(false),\n})\nexport type CanonicalColumn = z.infer<typeof canonicalColumnSchema>\n\nexport const canonicalLinkSchema = z.object({\n name: z.string().min(1).max(63),\n kind: z.enum(['toOne', 'toMany', 'toPlatformUser']),\n /** Target table name (namespace-local). Absent for toPlatformUser. */\n target: identifier.optional(),\n /** FK column on the owning side (toOne/toPlatformUser: on this table; toMany: on the target). */\n on: identifier,\n /** Referenced column on the target (default: target's PK / platform user `sub`). */\n references: identifier.optional(),\n /** enforce: true emits a real FK constraint (same-namespace toOne only). */\n enforce: z.boolean().default(false),\n description: z.string().max(500).optional(),\n})\nexport type CanonicalLink = z.infer<typeof canonicalLinkSchema>\n\nexport const canonicalIndexSchema = z.object({\n columns: z.array(identifier).min(1),\n unique: z.boolean().default(false),\n name: identifier.optional(),\n})\n\n/**\n * Policy expressions stay DSL SOURCE STRINGS in the canonical form — parsing\n * and claim-key validation happen in both CLI and server via the shared\n * predicate parser. Variants follow §4c permissive-union semantics.\n */\nexport const policyVariantSchema = z.object({\n /** Claims-only guard (capability()/role()/claim() comparisons — no columns). */\n when: z.string().min(1).max(1000),\n /** Exactly one of: allow-all bypass, or a row predicate. */\n allow: z.literal(true).optional(),\n policy: z.string().min(1).max(2000).optional(),\n}).refine((v) => (v.allow === true) !== (typeof v.policy === 'string'), {\n message: 'A variant declares exactly one of allow: true or policy',\n})\n\nexport const policyExpressionSchema = z.union([\n z.string().min(1).max(2000),\n z.object({\n default: z.string().min(1).max(2000),\n variants: z.array(policyVariantSchema).max(10).default([]),\n }),\n])\nexport type PolicyExpression = z.infer<typeof policyExpressionSchema>\n\nexport const canonicalPoliciesSchema = z.object({\n read: policyExpressionSchema.optional(),\n write: policyExpressionSchema.optional(),\n})\n\n/** Actions carry over from v1 as compiled named-SQL ops (plan: resolved OQ-1). */\nexport const canonicalActionSchema = z.object({\n name: identifier,\n requires: z.string().max(1000).optional(),\n params: z.record(z.string(), z.object({\n type: columnTypeSchema,\n nullable: z.boolean().default(false),\n })).default({}),\n executes: z.string().min(1).max(10_000),\n returns: z.enum(['rows', 'rowsAffected', 'scalar']).default('rowsAffected'),\n audit: z.object({ action: z.string(), resource: z.string() }).optional(),\n})\n\nexport const canonicalTableSchema = z.object({\n table: identifier,\n description: z.string().max(2000).optional(),\n /** Table-level rename hint (new in v2). */\n renamedFrom: identifier.optional(),\n /** Synced/reflected read-only tables (`source: gold.*`) — v1 semantics. */\n source: z.string().regex(/^gold\\.[a-z][a-z0-9_]*$/).optional(),\n columns: z.array(canonicalColumnSchema).default([]),\n primaryKey: z.array(identifier).min(1).max(8).optional(),\n links: z.array(canonicalLinkSchema).default([]),\n indexes: z.array(canonicalIndexSchema).default([]),\n policies: canonicalPoliciesSchema.default({}),\n actions: z.array(canonicalActionSchema).default([]),\n})\nexport type CanonicalTable = z.infer<typeof canonicalTableSchema>\n\nexport const canonicalDefinitionSchema = z.object({\n definition_format: z.literal(CANONICAL_FORMAT),\n namespace: identifier.max(41),\n description: z.string().max(2000).optional(),\n enums: z.array(canonicalEnumSchema).default([]),\n tables: z.array(canonicalTableSchema).min(0).max(500),\n /** Verbatim custom-roles grammar (@sequenceholdings/custom-roles-manifest). */\n capabilities: z.object({\n roles: z.unknown().optional(),\n uses: z.array(z.string()).default([]),\n }).default({ uses: [] }),\n})\nexport type CanonicalDefinition = z.infer<typeof canonicalDefinitionSchema>\n\n/**\n * Deterministic serialization discipline: tables sorted by name, columns in\n * declaration order (order is meaningful for DDL), links/indexes/actions\n * sorted by name, object keys emitted in schema order. `serializeNamespace`\n * (authoring layer) and the server-side re-validation both normalize through\n * this function before hashing so CLI and server hash identical bytes.\n */\nexport function normalizeCanonical(definition: CanonicalDefinition): CanonicalDefinition {\n const sortByName = <T extends { name: string }>(items: T[]): T[] =>\n [...items].sort((a, b) => a.name.localeCompare(b.name))\n return {\n ...definition,\n enums: sortByName(definition.enums),\n tables: [...definition.tables]\n .sort((a, b) => a.table.localeCompare(b.table))\n .map((t) => ({\n ...t,\n links: sortByName(t.links),\n indexes: [...t.indexes].sort((a, b) =>\n (a.name ?? a.columns.join('_')).localeCompare(b.name ?? b.columns.join('_'))),\n actions: sortByName(t.actions),\n })),\n }\n}\n","import { createHash } from 'node:crypto'\nimport { HASH_DOMAIN } from './constants.js'\nimport type { NamespaceCapabilities, NamespaceDefinition } from './schema/namespace.js'\nimport type { TableFile } from './schema/table.js'\n\ntype JsonValue = string | number | boolean | null | JsonValue[] | { [key: string]: JsonValue }\n\n/** `Object.entries` widens Zod record values to `unknown` under tsup's DTS check. */\ntype RoleDefinition = NonNullable<NamespaceCapabilities['roles']['definitions'][string]>\ntype CapabilityDeclaration = NonNullable<NamespaceCapabilities['roles']['capabilities'][string]>\n\n/** Key-sorted, undefined-skipped JSON — identical definitions hash identically regardless of YAML key order. */\nexport function stableJson(value: unknown): string {\n if (value === null || typeof value !== 'object') return JSON.stringify(value)\n if (Array.isArray(value)) return `[${value.map(stableJson).join(',')}]`\n const entries = Object.entries(value as Record<string, unknown>)\n .filter(([, entryValue]) => entryValue !== undefined)\n .sort(([a], [b]) => (a < b ? -1 : 1))\n .map(([key, entryValue]) => `${JSON.stringify(key)}:${stableJson(entryValue)}`)\n return `{${entries.join(',')}}`\n}\n\n/** Empty collections hash as omitted — `indexes: []` and no indexes are the same definition. */\nfunction emptyToNull(value: unknown): JsonValue {\n if (value == null) return null\n if (Array.isArray(value)) return value.length === 0 ? null : (value as JsonValue)\n if (typeof value === 'object' && Object.keys(value).length === 0) return null\n return value as JsonValue\n}\n\n/** Predicates hash by their source text; parsed ASTs are derived and excluded. */\nfunction canonicalTable(table: TableFile): JsonValue {\n return {\n table: table.table,\n description: table.description ?? null,\n columns: (table.columns ?? null) as JsonValue,\n source: table.source ?? null,\n links: emptyToNull(table.links),\n indexes: emptyToNull(table.indexes),\n policies: {\n read: table.policies?.read?.source ?? null,\n write: table.policies?.write?.source ?? null,\n },\n actions: emptyToNull(\n Object.fromEntries(\n Object.entries(table.actions ?? {}).map(([name, action]) => [\n name,\n {\n description: action.description ?? null,\n requires: action.requires?.source ?? null,\n params: emptyToNull(action.params),\n validates: emptyToNull(action.validates?.map((entry) => entry.source)),\n executes: action.executes,\n returns: emptyToNull(action.returns),\n audit: (action.audit ?? null) as JsonValue,\n },\n ]),\n ),\n ),\n }\n}\n\n/**\n * The capabilities block, canonicalized: record keys sort via stableJson, and\n * we sort every array (uses, each role's inherits/grants) so authoring order\n * never changes the hash. Absent optional descriptions are omitted, not null,\n * so the canonical block round-trips back through the manifest schema. An empty\n * block hashes as omitted — \"no capabilities\" and an empty block are the same.\n */\nfunction canonicalCapabilities(capabilities: NamespaceCapabilities): JsonValue {\n const { definitions, capabilities: declared } = capabilities.roles\n const isEmpty =\n Object.keys(definitions).length === 0 && Object.keys(declared).length === 0 && capabilities.uses.length === 0\n if (isEmpty) return null\n // JSON-safe by construction (omitted optionals are dropped by stableJson); the\n // conditional spreads defeat structural inference, so assert the JsonValue shape.\n return {\n roles: {\n definitions: Object.fromEntries(\n (Object.entries(definitions) as [string, RoleDefinition][]).map(([key, def]) => [\n key,\n {\n ...(def.description !== undefined ? { description: def.description } : {}),\n default: def.default,\n inherits: [...def.inherits].sort(),\n grants: [...def.grants].sort(),\n },\n ]),\n ),\n capabilities: Object.fromEntries(\n (Object.entries(declared) as [string, CapabilityDeclaration][]).map(([key, cap]) => [\n key,\n cap.description !== undefined ? { description: cap.description } : {},\n ]),\n ),\n },\n uses: [...capabilities.uses].sort(),\n } as JsonValue\n}\n\nexport function canonicalizeDefinition(definition: NamespaceDefinition): JsonValue {\n return {\n namespace: definition.namespace,\n description: definition.description,\n capabilities: canonicalCapabilities(definition.capabilities),\n tables: definition.tables.map(canonicalTable),\n }\n}\n\nexport function computeDefinitionHash(definition: NamespaceDefinition): string {\n return createHash('sha256')\n .update(HASH_DOMAIN)\n .update(stableJson(canonicalizeDefinition(definition)))\n .digest('hex')\n}\n","/**\n * `defineNamespace` + `serializeNamespace` — the bridge from the authoring\n * surface to canonical definition v2. Serialization is deterministic\n * (`normalizeCanonical` ordering, zod defaults materialized) so the CLI and\n * the server hash identical bytes; `computeCanonicalHash` reuses the v1\n * canonical-hash helper (`stableJson` + HASH_DOMAIN) over the normalized\n * canonical JSON.\n *\n * Every definition-time validation error names the offending table (and the\n * consumer file when loaded via `loadNamespaceFromDir`).\n */\nimport { createHash } from 'node:crypto'\nimport { z } from 'zod'\nimport {\n CANONICAL_FORMAT,\n canonicalDefinitionSchema,\n canonicalLinkSchema,\n canonicalTableSchema,\n normalizeCanonical,\n type CanonicalDefinition,\n type CanonicalEnum,\n type CanonicalTable,\n type PolicyExpression,\n} from '../canonical/v2.js'\nimport { HASH_DOMAIN, NAMESPACE_PATTERN } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { stableJson } from '../hash.js'\nimport { deriveColumnName, type EnumRef } from './columns.js'\nimport { registerNamespaceConfig, activeAuthoringContext } from './registry.js'\nimport { isSeqTable, type PolicyInput, type SeqLink, type SeqTable, type TableRef } from './table.js'\n\nexport const NAMESPACE_CONFIG_BRAND = 'seq-namespace-config' as const\n\nexport interface NamespaceCapabilitiesInput {\n /** Verbatim custom-roles grammar (@sequenceholdings/custom-roles-manifest). */\n roles?: unknown\n /** Org-level capability pins this namespace attaches to. */\n uses?: readonly string[]\n}\n\nexport interface NamespaceConfigInput {\n namespace: string\n description?: string\n capabilities?: NamespaceCapabilitiesInput\n}\n\nexport interface SeqNamespaceConfig {\n readonly kind: typeof NAMESPACE_CONFIG_BRAND\n readonly namespace: string\n readonly description: string | undefined\n readonly capabilities: NamespaceCapabilitiesInput\n readonly file: string | undefined\n}\n\nexport function isSeqNamespaceConfig(value: unknown): value is SeqNamespaceConfig {\n return (\n typeof value === 'object' && value !== null && (value as { kind?: unknown }).kind === NAMESPACE_CONFIG_BRAND\n )\n}\n\nexport function defineNamespace(input: NamespaceConfigInput): SeqNamespaceConfig {\n const file = activeAuthoringContext()?.currentFile\n if (!NAMESPACE_PATTERN.test(input.namespace)) {\n throw new OrmDefinitionError(`namespace \"${input.namespace}\" must match ${NAMESPACE_PATTERN}`, file)\n }\n const config: SeqNamespaceConfig = {\n kind: NAMESPACE_CONFIG_BRAND,\n namespace: input.namespace,\n description: input.description,\n capabilities: input.capabilities ?? {},\n file,\n }\n registerNamespaceConfig(config)\n return config\n}\n\n// ---------------------------------------------------------------------------\n// Serialization\n// ---------------------------------------------------------------------------\n\nexport interface SerializeNamespaceInput {\n config: SeqNamespaceConfig\n tables: readonly SeqTable[]\n enums?: readonly EnumRef[]\n}\n\n/**\n * Serialize the authored namespace to a validated, normalized\n * `CanonicalDefinition` (definition_format: 2). Throws `OrmDefinitionError`\n * naming the table/file on any inconsistency.\n */\nexport function serializeNamespace(input: SerializeNamespaceInput): CanonicalDefinition {\n const { config, tables } = input\n const enums = input.enums ?? []\n\n const tablesByName = new Map<string, SeqTable>()\n for (const table of tables) {\n const existing = tablesByName.get(table.tableName)\n if (existing) {\n throw new OrmDefinitionError(\n `duplicate table \"${table.tableName}\" (defined in ${describeFile(existing)} and ${describeFile(table)})`,\n table.file,\n )\n }\n tablesByName.set(table.tableName, table)\n }\n\n const enumsByName = new Map<string, EnumRef>()\n for (const ref of enums) {\n if (enumsByName.has(ref.name)) {\n throw new OrmDefinitionError(`duplicate enum \"${ref.name}\"`, config.file)\n }\n enumsByName.set(ref.name, ref)\n }\n\n const canonicalTables = tables.map((table) => buildCanonicalTable({ table, tablesByName, enumsByName }))\n const canonicalEnums: CanonicalEnum[] = [...enumsByName.values()].map((ref) => ({\n name: ref.name,\n values: [...ref.values],\n }))\n\n const candidate: z.input<typeof canonicalDefinitionSchema> = {\n definition_format: CANONICAL_FORMAT,\n namespace: config.namespace,\n enums: canonicalEnums,\n tables: canonicalTables,\n capabilities: {\n ...(config.capabilities.roles !== undefined ? { roles: config.capabilities.roles } : {}),\n uses: [...(config.capabilities.uses ?? [])],\n },\n }\n if (config.description !== undefined) candidate.description = config.description\n\n let parsed: CanonicalDefinition\n try {\n parsed = canonicalDefinitionSchema.parse(candidate)\n } catch (error) {\n if (error instanceof z.ZodError) {\n throw new OrmDefinitionError(`namespace \"${config.namespace}\": ${formatZodIssues(error)}`, config.file)\n }\n throw error\n }\n return normalizeCanonical(parsed)\n}\n\n/** sha256 over the v1 hash domain + key-sorted JSON of the normalized canonical definition. */\nexport function computeCanonicalHash(definition: CanonicalDefinition): string {\n return createHash('sha256').update(HASH_DOMAIN).update(stableJson(definition)).digest('hex')\n}\n\n// ---------------------------------------------------------------------------\n// Per-table serialization\n// ---------------------------------------------------------------------------\n\ninterface TableBuildContext {\n table: SeqTable\n tablesByName: Map<string, SeqTable>\n enumsByName: Map<string, EnumRef>\n}\n\nfunction buildCanonicalTable({ table, tablesByName, enumsByName }: TableBuildContext): CanonicalTable {\n const candidate: z.input<typeof canonicalTableSchema> = {\n table: table.tableName,\n columns: [],\n links: [],\n indexes: [],\n policies: {},\n actions: [],\n }\n if (table.config.description !== undefined) candidate.description = table.config.description\n if (table.config.renamedFrom !== undefined) candidate.renamedFrom = table.config.renamedFrom\n if (table.source !== undefined) candidate.source = table.source\n\n // Columns — declaration order is meaningful for DDL.\n const columnLevelPk: string[] = []\n for (const [propertyName, builder] of Object.entries(table.columns)) {\n const column = builder.toCanonicalColumn(propertyName)\n const enumName = builder.enumName\n if (enumName !== undefined && !enumsByName.has(enumName)) {\n throw new OrmDefinitionError(\n `table \"${table.tableName}\": column \"${propertyName}\" references enum \"${enumName}\" which is not passed to serializeNamespace — declare it with defineEnum and include it`,\n table.file,\n )\n }\n if (builder.isPrimaryKey) columnLevelPk.push(column.columnName)\n candidate.columns?.push(column)\n }\n\n // Primary key — column-level `.primaryKey()` or config-level composite, never both.\n if (table.config.primaryKey !== undefined) {\n if (columnLevelPk.length > 0) {\n throw new OrmDefinitionError(\n `table \"${table.tableName}\": declare the primary key either with .primaryKey() on columns or with config.primaryKey — not both`,\n table.file,\n )\n }\n candidate.primaryKey = table.config.primaryKey.map((ref) =>\n resolveColumnRef({ table, ref, role: 'primaryKey' }),\n )\n } else if (columnLevelPk.length > 0) {\n candidate.primaryKey = columnLevelPk\n }\n\n // Indexes.\n for (const index of table.config.indexes ?? []) {\n const entry: { columns: string[]; unique?: boolean; name?: string } = {\n columns: index.columns.map((ref) => resolveColumnRef({ table, ref, role: 'index' })),\n }\n if (index.unique !== undefined) entry.unique = index.unique\n if (index.name !== undefined) entry.name = index.name\n candidate.indexes?.push(entry)\n }\n\n // Links.\n for (const [linkName, link] of Object.entries(table.config.links ?? {})) {\n candidate.links?.push(buildCanonicalLink({ table, linkName, link, tablesByName }))\n }\n\n // Policies — DSL source strings pass through; variants validated by the canonical schema.\n const policies: { read?: PolicyExpression; write?: PolicyExpression } = {}\n if (table.config.policies?.read !== undefined) policies.read = toCanonicalPolicy(table.config.policies.read)\n if (table.config.policies?.write !== undefined) policies.write = toCanonicalPolicy(table.config.policies.write)\n candidate.policies = policies\n\n // Actions.\n for (const action of table.config.actions ?? []) {\n candidate.actions?.push({\n name: action.name,\n ...(action.requires !== undefined ? { requires: action.requires } : {}),\n params: Object.fromEntries(\n Object.entries(action.params ?? {}).map(([name, param]) => [\n name,\n { type: param.type, nullable: param.nullable ?? false },\n ]),\n ),\n executes: action.executes,\n returns: action.returns ?? 'rowsAffected',\n ...(action.audit !== undefined ? { audit: action.audit } : {}),\n })\n }\n\n try {\n return canonicalTableSchema.parse(candidate)\n } catch (error) {\n if (error instanceof z.ZodError) {\n throw new OrmDefinitionError(`table \"${table.tableName}\": ${formatZodIssues(error)}`, table.file)\n }\n throw error\n }\n}\n\nfunction buildCanonicalLink({\n table,\n linkName,\n link,\n tablesByName,\n}: {\n table: SeqTable\n linkName: string\n link: SeqLink\n tablesByName: Map<string, SeqTable>\n}): z.input<typeof canonicalLinkSchema> {\n const fail = (message: string): never => {\n throw new OrmDefinitionError(`table \"${table.tableName}\": link \"${linkName}\" ${message}`, table.file)\n }\n\n if (link.enforce && link.linkKind !== 'toOne') {\n return fail('sets enforce: true, which is only supported on toOne links')\n }\n\n if (link.linkKind === 'toPlatformUser') {\n if (link.target !== undefined) return fail('is toPlatformUser and must not declare a target table')\n return {\n name: linkName,\n kind: 'toPlatformUser',\n on: resolveColumnRef({ table, ref: link.on, role: `link \"${linkName}\" on` }),\n ...(link.references !== undefined ? { references: deriveColumnName(link.references) } : {}),\n enforce: false,\n ...(link.description !== undefined ? { description: link.description } : {}),\n }\n }\n\n const target = resolveTableRef({ ref: link.target, fail })\n if (!tablesByName.has(target.tableName)) {\n return fail(`targets table \"${target.tableName}\" which is not part of this namespace`)\n }\n\n // toOne: FK column lives on this table; toMany: on the target.\n const owningSide = link.linkKind === 'toOne' ? table : target\n return {\n name: linkName,\n kind: link.linkKind,\n target: target.tableName,\n on: resolveColumnRef({ table: owningSide, ref: link.on, role: `link \"${linkName}\" on` }),\n ...(link.references !== undefined\n ? { references: resolveColumnRef({ table: target, ref: link.references, role: `link \"${linkName}\" references` }) }\n : {}),\n enforce: link.enforce,\n ...(link.description !== undefined ? { description: link.description } : {}),\n }\n}\n\nfunction resolveTableRef({ ref, fail }: { ref: TableRef | undefined; fail: (message: string) => never }): SeqTable {\n if (ref === undefined) return fail('declares no target table')\n if (typeof ref !== 'function') return ref\n let resolved: unknown\n try {\n resolved = ref()\n } catch (error) {\n return fail(\n `target thunk threw (${error instanceof Error ? error.message : String(error)}) — lazy refs resolve at serialize time; make sure the target module ran`,\n )\n }\n if (!isSeqTable(resolved)) return fail('target thunk did not return a table defined with defineTable')\n return resolved\n}\n\n/**\n * Resolve a column reference that may be a TS property name (camelCase) or\n * an actual Postgres column name.\n */\nfunction resolveColumnRef({ table, ref, role }: { table: SeqTable; ref: string; role: string }): string {\n const direct = table.columns[ref]\n if (direct) return direct.columnNameFor(ref)\n for (const [propertyName, builder] of Object.entries(table.columns)) {\n if (builder.columnNameFor(propertyName) === ref) return ref\n }\n const known = Object.keys(table.columns).join(', ')\n throw new OrmDefinitionError(\n `table \"${table.tableName}\": ${role} references unknown column \"${ref}\" (known columns: ${known || 'none'})`,\n table.file,\n )\n}\n\nfunction toCanonicalPolicy(policy: PolicyInput): PolicyExpression {\n if (typeof policy === 'string') return policy\n return {\n default: policy.default,\n variants: (policy.variants ?? []).map((variant) => ({\n when: variant.when,\n ...(variant.allow === true ? { allow: true as const } : {}),\n ...(variant.policy !== undefined ? { policy: variant.policy } : {}),\n })),\n }\n}\n\nfunction describeFile(table: SeqTable): string {\n return table.file ?? '<unknown file>'\n}\n\nfunction formatZodIssues(error: z.ZodError): string {\n return error.issues\n .map((issue) => (issue.path.length > 0 ? `${issue.path.join('.')}: ${issue.message}` : issue.message))\n .join('; ')\n}\n","/**\n * `loadNamespaceFromDir` — the CLI-side loader that imports a consumer\n * namespace directory (`sequence.config.ts` + `schema/*.ts`) via jiti and\n * collects the `defineNamespace` / `defineTable` / `defineEnum`\n * registrations (module-registry pattern; see registry.ts).\n *\n * jiti caveats this file owns:\n * - jiti evaluates its OWN transpiled copy of '@sequenceholdings/orm' for\n * consumer imports; registrations still land in the shared globalThis\n * context (registry.ts).\n * - jiti populates the native CJS module cache, so files under the loaded\n * directory are PURGED from `require.cache` before each load — repeated\n * loads re-evaluate consumer modules (determinism checks, watch loops)\n * while intra-load imports still deduplicate (a schema file imported by a\n * sibling AND by the loader evaluates exactly once per load).\n */\nimport { createJiti } from 'jiti'\nimport { readdir, realpath, stat } from 'node:fs/promises'\nimport { createRequire } from 'node:module'\nimport { join, sep } from 'node:path'\nimport { OrmDefinitionError } from '../errors.js'\nimport type { CanonicalDefinition } from '../canonical/v2.js'\nimport { isEnumRef, type EnumRef } from './columns.js'\nimport {\n computeCanonicalHash,\n isSeqNamespaceConfig,\n serializeNamespace,\n type SeqNamespaceConfig,\n} from './namespace.js'\nimport { beginAuthoringContext, endAuthoringContext } from './registry.js'\nimport { isSeqTable, type SeqTable } from './table.js'\n\nexport const NAMESPACE_CONFIG_FILE = 'sequence.config.ts'\nexport const SCHEMA_DIR = 'schema'\n\nexport interface LoadNamespaceOptions {\n /**\n * Test/dev hook: absolute path that bare `'@sequenceholdings/orm'` imports\n * in consumer files resolve to (jiti alias). Leave unset in production —\n * the consumer's own installed package resolves naturally.\n */\n ormModulePath?: string\n}\n\nexport interface LoadedNamespaceV2 {\n readonly canonical: CanonicalDefinition\n readonly hash: string\n /** Relative paths of the files that were imported, config first. */\n readonly files: readonly string[]\n}\n\nexport async function loadNamespaceFromDir(\n dir: string,\n options: LoadNamespaceOptions = {},\n): Promise<LoadedNamespaceV2> {\n const root = await realpath(dir).catch(() => {\n throw new OrmDefinitionError(`namespace directory not found: ${dir}`)\n })\n\n const configPath = join(root, NAMESPACE_CONFIG_FILE)\n const configStat = await stat(configPath).catch(() => undefined)\n if (!configStat?.isFile()) {\n throw new OrmDefinitionError(`${NAMESPACE_CONFIG_FILE} not found in ${dir}`)\n }\n\n const schemaFiles = await listSchemaFiles(root)\n const files = [NAMESPACE_CONFIG_FILE, ...schemaFiles]\n\n purgeModuleCache(root)\n\n const jiti = createJiti(import.meta.url, {\n interopDefault: true,\n fsCache: false,\n ...(options.ormModulePath !== undefined\n ? { alias: { '@sequenceholdings/orm': options.ormModulePath } }\n : {}),\n })\n\n const context = beginAuthoringContext()\n try {\n for (const file of files) {\n context.currentFile = file\n try {\n await jiti.import(join(root, file))\n } catch (error) {\n // Cross-copy safe: the jiti copy's OrmDefinitionError is a different\n // class object, so match by name, never instanceof.\n if (error instanceof Error && error.name === 'OrmDefinitionError') throw error\n throw new OrmDefinitionError(\n `failed to load: ${error instanceof Error ? error.message : String(error)}`,\n file,\n )\n }\n }\n } finally {\n context.currentFile = undefined\n endAuthoringContext(context)\n }\n\n const configs: Array<{ value: SeqNamespaceConfig; file: string | undefined }> = []\n for (const entry of context.configs) {\n if (isSeqNamespaceConfig(entry.value)) configs.push({ value: entry.value, file: entry.file })\n }\n const configEntry = configs[0]\n if (!configEntry) {\n throw new OrmDefinitionError(\n 'no namespace config registered — sequence.config.ts must call defineNamespace(...) at import time',\n NAMESPACE_CONFIG_FILE,\n )\n }\n if (configs.length > 1) {\n const where = configs.map((entry) => entry.file ?? '<unknown file>').join(', ')\n throw new OrmDefinitionError(\n `defineNamespace called ${configs.length} times (${where}) — declare exactly one namespace config`,\n )\n }\n\n const tables: SeqTable[] = []\n for (const entry of context.tables) {\n if (isSeqTable(entry.value)) tables.push(entry.value)\n }\n if (tables.length === 0) {\n throw new OrmDefinitionError(\n `no tables registered — ${SCHEMA_DIR}/*.ts modules must call defineTable(...) at import time`,\n )\n }\n\n const enums: EnumRef[] = []\n for (const entry of context.enums) {\n if (isEnumRef(entry.value)) enums.push(entry.value)\n }\n\n const canonical = serializeNamespace({ config: configEntry.value, tables, enums })\n return { canonical, hash: computeCanonicalHash(canonical), files }\n}\n\nasync function listSchemaFiles(root: string): Promise<string[]> {\n const schemaDir = join(root, SCHEMA_DIR)\n const entries = await readdir(schemaDir, { withFileTypes: true }).catch(() => [])\n return entries\n .filter(\n (entry) =>\n entry.isFile() && entry.name.endsWith('.ts') && !entry.name.endsWith('.d.ts') && !entry.name.startsWith('.'),\n )\n .map((entry) => join(SCHEMA_DIR, entry.name))\n .sort()\n}\n\n/** Drop the directory's modules from the native CJS cache so a re-load re-evaluates them. */\nfunction purgeModuleCache(root: string): void {\n const require = createRequire(import.meta.url)\n const prefix = root.endsWith(sep) ? root : `${root}${sep}`\n for (const key of Object.keys(require.cache)) {\n if (key.startsWith(prefix)) delete require.cache[key]\n }\n}\n","import type { ActionDefinition } from '../schema/actions.js'\nimport type { ColumnDefinition, ColumnType } from '../schema/columns.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\n\n/**\n * Wire types per column type — what a Data API row actually carries after\n * the driver + JSON serialization, not the Postgres type. Mirrors\n * engine/columns.ts: bigint arrives as a STRING (int8 exceeds JS number\n * precision, so the executor serializes it losslessly); numeric stays a\n * string (exact decimal); timestamptz serializes to an ISO string.\n */\nconst WIRE_TYPES: Readonly<Record<ColumnType, string>> = {\n uuid: 'string',\n text: 'string',\n integer: 'number',\n bigint: 'string',\n numeric: 'string',\n double: 'number',\n boolean: 'boolean',\n timestamptz: 'string',\n date: 'string',\n jsonb: 'unknown',\n}\n\n/**\n * Emit the `Tables` type for a namespace — the generic parameter for\n * `createOrmClient<…Tables>`. A `type` alias, deliberately not an\n * `interface`: object type literals carry the implicit index signature that\n * satisfies the client's `Record<string, Record<string, unknown>>`\n * constraint; interfaces don't. Derived from the definitions alone (no\n * database), so generation is deterministic and runs offline.\n */\nexport function generateNamespaceTypes(definition: NamespaceDefinition): string {\n const lines: string[] = [\n `// Generated by \\`seq-studio orm apply\\` from the '${definition.namespace}' definitions — do not edit.`,\n '',\n `export type ${typesInterfaceName(definition.namespace)} = {`,\n ]\n for (const table of definition.tables) {\n if (table.source) {\n // Synced tables reflect their gold source at apply — the definitions\n // don't declare columns, so the row type stays permissive until\n // reflected generation lands. Readable through the client today.\n lines.push(` /** Synced from ${table.source} — columns reflect the gold source. */`)\n lines.push(` ${table.table}: Record<string, unknown>`)\n continue\n }\n lines.push(` ${table.table}: {`)\n for (const [name, column] of Object.entries(table.columns ?? {})) {\n // Phase one of a column retirement: deprecated columns leave the typed\n // surface while the data stays, so consumers migrate before the drop.\n if (column.deprecated) continue\n lines.push(` ${name}: ${columnWireType(column)}`)\n }\n lines.push(' }')\n }\n lines.push('}', '')\n lines.push(...actionTypeLines(definition))\n return lines.join('\\n')\n}\n\n/**\n * Emit the `Actions` type for a namespace — the second generic parameter for\n * `createOrmClient<…Tables, …Actions>`, keying each action to its param and\n * result shapes. An action with `returns:` resolves to `{ rows: Row[] }`; a\n * count action to `{ rowsAffected: number }`. Derived from the definitions\n * alone, like the table types.\n */\nfunction actionTypeLines(definition: NamespaceDefinition): string[] {\n const actions = definition.tables.flatMap((table) => Object.entries(table.actions ?? {}))\n const lines = [`export type ${actionsInterfaceName(definition.namespace)} = {`]\n for (const [name, action] of actions.sort(([a], [b]) => a.localeCompare(b))) {\n lines.push(` ${name}: { params: ${actionParamsType(action)}; result: ${actionResultType(action)} }`)\n }\n lines.push('}', '')\n return lines\n}\n\nfunction actionParamsType(action: ActionDefinition): string {\n const entries = Object.entries(action.params ?? {})\n if (entries.length === 0) return 'Record<never, never>'\n const fields = entries.map(([name, param]) => {\n const base = WIRE_TYPES[param.type]\n return param.optional ? `${name}?: ${base} | null` : `${name}: ${base}`\n })\n return `{ ${fields.join('; ')} }`\n}\n\nfunction actionResultType(action: ActionDefinition): string {\n if (!action.returns) return '{ rowsAffected: number }'\n // A RETURNING column is nullable at runtime and `returns` records only the\n // type, so every field is `| null` (unknown jsonb already subsumes null).\n const columns = Object.entries(action.returns).map(([name, type]) => {\n const base = WIRE_TYPES[type]\n return base === 'unknown' ? `${name}: ${base}` : `${name}: ${base} | null`\n })\n return `{ rows: Array<{ ${columns.join('; ')} }> }`\n}\n\nexport function typesInterfaceName(namespace: string): string {\n return `${pascalCase(namespace)}Tables`\n}\n\nexport function actionsInterfaceName(namespace: string): string {\n return `${pascalCase(namespace)}Actions`\n}\n\nfunction pascalCase(namespace: string): string {\n return namespace\n .split('_')\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('')\n}\n\nfunction columnWireType(column: ColumnDefinition): string {\n const base = WIRE_TYPES[column.type]\n const notNull = column.primary_key === true || column.nullable === false\n return notNull || base === 'unknown' ? base : `${base} | null`\n}\n","export const COMPARE_OPS = ['=', '!=', '<', '<=', '>', '>='] as const\nexport type CompareOp = (typeof COMPARE_OPS)[number]\n\nexport type Operand =\n | { kind: 'column'; name: string }\n | { kind: 'claim'; key: string }\n | { kind: 'literal'; value: string | number | boolean | null }\n\nexport type Predicate =\n | { kind: 'and'; operands: readonly Predicate[] }\n | { kind: 'or'; operands: readonly Predicate[] }\n | { kind: 'not'; operand: Predicate }\n | { kind: 'compare'; op: CompareOp; left: Operand; right: Operand }\n | { kind: 'capability'; key: string }\n\nexport interface ParsedPredicate {\n readonly source: string\n readonly ast: Predicate\n}\n\nexport function walkPredicate(predicate: Predicate, visit: (node: Predicate) => void): void {\n visit(predicate)\n if (predicate.kind === 'and' || predicate.kind === 'or') {\n for (const operand of predicate.operands) walkPredicate(operand, visit)\n }\n if (predicate.kind === 'not') walkPredicate(predicate.operand, visit)\n}\n\nexport function predicateOperands(predicate: Predicate): Operand[] {\n const operands: Operand[] = []\n walkPredicate(predicate, (node) => {\n if (node.kind === 'compare') operands.push(node.left, node.right)\n })\n return operands\n}\n\nexport function referencedColumns(predicate: Predicate): string[] {\n const names = predicateOperands(predicate).flatMap((operand) =>\n operand.kind === 'column' ? [operand.name] : [],\n )\n return [...new Set(names)]\n}\n\nexport function referencedCapabilities(predicate: Predicate): string[] {\n const keys: string[] = []\n walkPredicate(predicate, (node) => {\n if (node.kind === 'capability') keys.push(node.key)\n })\n return [...new Set(keys)]\n}\n","import { z } from 'zod'\nimport {\n IDENTIFIER_PATTERN,\n MAX_IDENTIFIER_LENGTH,\n NAMESPACE_PATTERN,\n QUALIFIED_TABLE_PATTERN,\n} from '../constants.js'\n\nexport const identifierSchema = z\n .string()\n .max(MAX_IDENTIFIER_LENGTH)\n .regex(IDENTIFIER_PATTERN, 'must be a lowercase identifier (a-z, 0-9, _)')\n\nexport const namespaceSchema = z\n .string()\n .regex(NAMESPACE_PATTERN, 'must be lowercase, start with a letter, and be at most 41 characters')\n\n/** `<table>` for a table in the same namespace, `<schema>.<table>` for anything else. */\nexport const tableReferenceSchema = z\n .string()\n .refine(\n (value) => IDENTIFIER_PATTERN.test(value) || QUALIFIED_TABLE_PATTERN.test(value),\n 'must be a table name or a schema-qualified table reference',\n )\n\nexport const isQualifiedReference = (reference: string): boolean => reference.includes('.')\n","import { z } from 'zod'\nimport { identifierSchema } from './identifiers.js'\n\nexport const COLUMN_TYPES = [\n 'uuid',\n 'text',\n 'integer',\n 'bigint',\n 'numeric',\n 'double',\n 'boolean',\n 'timestamptz',\n 'date',\n 'jsonb',\n] as const\n\nexport type ColumnType = (typeof COLUMN_TYPES)[number]\n\nexport const columnTypeSchema = z.enum(COLUMN_TYPES)\n\nconst FUNCTION_DEFAULTS: Readonly<Record<string, readonly ColumnType[]>> = {\n 'gen_random_uuid()': ['uuid'],\n 'now()': ['timestamptz', 'date'],\n}\n\nconst CAST_PATTERN = /^([a-z][a-z0-9_]*)::([a-z]+)$/\n\n/**\n * True when the default is one of the allowlisted SQL function calls for its\n * type — the ONLY defaults the engine may emit as raw SQL. Everything else\n * is a literal value; in particular a text default that happens to end in\n * `()` is data, never code.\n */\nexport const isFunctionDefault = (value: ColumnDefault, type: ColumnType): boolean =>\n typeof value === 'string' && (FUNCTION_DEFAULTS[value]?.includes(type) ?? false)\n\nexport type ColumnDefault = string | number | boolean\n\nexport interface ColumnDefinition {\n readonly type: ColumnType\n readonly primary_key?: boolean\n readonly nullable?: boolean\n readonly unique?: boolean\n readonly default?: ColumnDefault\n readonly description?: string\n readonly renamed_from?: string\n readonly cast?: string\n readonly deprecated?: boolean\n}\n\nfunction defaultIssue(value: ColumnDefault, type: ColumnType): string | null {\n if (typeof value === 'boolean') return type === 'boolean' ? null : `boolean default is invalid for type '${type}'`\n if (typeof value === 'number') {\n if (!['integer', 'bigint', 'numeric', 'double'].includes(type)) {\n return `numeric default is invalid for type '${type}'`\n }\n if (['integer', 'bigint'].includes(type)) {\n if (!Number.isInteger(value)) return `default for type '${type}' must be an integer`\n if (!Number.isSafeInteger(value)) {\n return `default for type '${type}' exceeds the safe integer range — YAML numbers lose precision past 2^53`\n }\n }\n // `numeric` is exact-precision in Postgres but this value already went\n // through a JS float — past 2^53 it may not be what was written. Quote\n // it as a string to keep exact precision. (`double` IS a float; fine.)\n if (type === 'numeric' && Math.abs(value) > Number.MAX_SAFE_INTEGER) {\n return \"numeric default exceeds the safe float range — write it as a string (e.g. '9007199254740993') to keep exact precision\"\n }\n return null\n }\n // The exact allowlisted function names always validate against their\n // types — `now()` on a text column is a misdeclared type, not a literal.\n const allowedTypes = FUNCTION_DEFAULTS[value]\n if (allowedTypes) return allowedTypes.includes(type) ? null : `default '${value}' is invalid for type '${type}'`\n // Any other string default is a quoted literal — including strings ending\n // in `()`, which are data, never code. Whether the literal parses is the\n // column input function's call at apply; string grammars (uuid forms,\n // numeric notations, date formats) are never mirrored client-side.\n return null\n}\n\nexport const columnSchema = z\n .strictObject({\n type: columnTypeSchema,\n primary_key: z.boolean().optional(),\n nullable: z.boolean().optional(),\n unique: z.boolean().optional(),\n default: z.union([z.string(), z.number(), z.boolean()]).optional(),\n description: z.string().optional(),\n renamed_from: identifierSchema.optional(),\n cast: z.string().optional(),\n deprecated: z.boolean().optional(),\n })\n .superRefine((column, ctx) => {\n if (column.default !== undefined) {\n const issue = defaultIssue(column.default, column.type)\n if (issue) ctx.addIssue({ code: 'custom', message: issue, path: ['default'] })\n }\n if (column.primary_key && column.nullable) {\n ctx.addIssue({ code: 'custom', message: 'a primary key column cannot be nullable', path: ['nullable'] })\n }\n if (column.primary_key && column.deprecated) {\n ctx.addIssue({ code: 'custom', message: 'a primary key column cannot be deprecated', path: ['deprecated'] })\n }\n if (column.cast && !CAST_PATTERN.test(column.cast)) {\n ctx.addIssue({ code: 'custom', message: \"cast must have the shape '<column>::<type>'\", path: ['cast'] })\n }\n })\n\nexport function castParts(cast: string): { column: string; type: string } | null {\n const match = CAST_PATTERN.exec(cast)\n if (!match) return null\n return { column: match[1] as string, type: match[2] as string }\n}\n","import { CAPABILITY_KEY_PATTERN, CLAIM_KEY_PATTERN, IDENTIFIER_PATTERN } from '../constants.js'\nimport { PredicateParseError } from '../errors.js'\nimport { COMPARE_OPS, type CompareOp, type Operand, type ParsedPredicate, type Predicate } from './ast.js'\n\ntype TokenKind = 'identifier' | 'string' | 'number' | 'operator' | 'lparen' | 'rparen' | 'comma' | 'end'\n\ninterface Token {\n readonly kind: TokenKind\n readonly value: string\n readonly position: number\n}\n\nconst KEYWORDS = new Set(['and', 'or', 'not', 'true', 'false', 'null', 'claim', 'capability'])\nconst OPERATOR_PATTERN = /^(!=|<=|>=|<>|=|<|>)/\nconst IDENTIFIER_START = /[a-z_]/\nconst IDENTIFIER_CHAR = /[a-z0-9_.-]/\nconst NUMBER_PATTERN = /^-?\\d+(\\.\\d+)?/\n\nfunction tokenize(source: string): Token[] {\n const tokens: Token[] = []\n let position = 0\n\n while (position < source.length) {\n const char = source[position] as string\n\n if (/\\s/.test(char)) {\n position += 1\n continue\n }\n if (char === '(') {\n tokens.push({ kind: 'lparen', value: char, position })\n position += 1\n continue\n }\n if (char === ')') {\n tokens.push({ kind: 'rparen', value: char, position })\n position += 1\n continue\n }\n if (char === ',') {\n tokens.push({ kind: 'comma', value: char, position })\n position += 1\n continue\n }\n if (char === \"'\") {\n const { value, end } = readString(source, position)\n tokens.push({ kind: 'string', value, position })\n position = end\n continue\n }\n\n const operator = OPERATOR_PATTERN.exec(source.slice(position))\n if (operator) {\n const value = operator[0] === '<>' ? '!=' : operator[0]\n tokens.push({ kind: 'operator', value, position })\n position += operator[0].length\n continue\n }\n\n const number = NUMBER_PATTERN.exec(source.slice(position))\n if (number && !IDENTIFIER_START.test(char)) {\n tokens.push({ kind: 'number', value: number[0], position })\n position += number[0].length\n continue\n }\n\n if (IDENTIFIER_START.test(char)) {\n let end = position\n while (end < source.length && IDENTIFIER_CHAR.test(source[end] as string)) end += 1\n tokens.push({ kind: 'identifier', value: source.slice(position, end), position })\n position = end\n continue\n }\n\n throw new PredicateParseError(`unexpected character '${char}'`, position)\n }\n\n tokens.push({ kind: 'end', value: '', position: source.length })\n return tokens\n}\n\nfunction readString(source: string, start: number): { value: string; end: number } {\n let value = ''\n let position = start + 1\n while (position < source.length) {\n const char = source[position] as string\n if (char !== \"'\") {\n value += char\n position += 1\n continue\n }\n if (source[position + 1] === \"'\") {\n value += \"'\"\n position += 2\n continue\n }\n return { value, end: position + 1 }\n }\n throw new PredicateParseError('unterminated string literal', start)\n}\n\nclass Parser {\n private index = 0\n\n constructor(private readonly tokens: Token[]) {}\n\n parse(): Predicate {\n const predicate = this.parseOr()\n this.expect('end', 'end of expression')\n return predicate\n }\n\n private parseOr(): Predicate {\n const operands = [this.parseAnd()]\n while (this.matchKeyword('or')) operands.push(this.parseAnd())\n return operands.length === 1 ? (operands[0] as Predicate) : { kind: 'or', operands }\n }\n\n private parseAnd(): Predicate {\n const operands = [this.parseNot()]\n while (this.matchKeyword('and')) operands.push(this.parseNot())\n return operands.length === 1 ? (operands[0] as Predicate) : { kind: 'and', operands }\n }\n\n private parseNot(): Predicate {\n if (this.matchKeyword('not')) return { kind: 'not', operand: this.parseNot() }\n return this.parsePrimary()\n }\n\n private parsePrimary(): Predicate {\n if (this.peek().kind === 'lparen') {\n this.advance()\n const inner = this.parseOr()\n this.expect('rparen', \"')'\")\n return inner\n }\n if (this.peekKeyword('capability')) {\n const capability = this.parseCapability()\n const next = this.peek()\n if (next.kind === 'operator') {\n throw new PredicateParseError('capability() is boolean-valued and cannot appear in a comparison', next.position)\n }\n return capability\n }\n return this.parseComparison()\n }\n\n private parseCapability(): Predicate {\n this.advance()\n const key = this.parseCallArgument('capability')\n if (!CAPABILITY_KEY_PATTERN.test(key)) {\n throw new PredicateParseError(`invalid capability key '${key}'`, this.peek().position)\n }\n return { kind: 'capability', key }\n }\n\n private parseComparison(): Predicate {\n const left = this.parseOperand()\n const operator = this.expect('operator', 'a comparison operator')\n if (!COMPARE_OPS.includes(operator.value as CompareOp)) {\n throw new PredicateParseError(`unsupported operator '${operator.value}'`, operator.position)\n }\n const right = this.parseOperand()\n return { kind: 'compare', op: operator.value as CompareOp, left, right }\n }\n\n private parseOperand(): Operand {\n const token = this.peek()\n\n if (token.kind === 'string') {\n this.advance()\n return { kind: 'literal', value: token.value }\n }\n if (token.kind === 'number') {\n this.advance()\n const value = Number(token.value)\n // A bigint-sized literal would silently round through the JS number and\n // compile a policy against the wrong identifier — reject; quote it.\n if (!Number.isFinite(value) || (Number.isInteger(value) && !Number.isSafeInteger(value))) {\n throw new PredicateParseError(\n `numeric literal '${token.value}' exceeds safe integer precision — quote it as a string`,\n token.position,\n )\n }\n return { kind: 'literal', value }\n }\n if (token.kind !== 'identifier') {\n throw new PredicateParseError(`expected an operand, got '${token.value || 'end'}'`, token.position)\n }\n\n this.advance()\n if (token.value === 'true' || token.value === 'false') {\n return { kind: 'literal', value: token.value === 'true' }\n }\n if (token.value === 'null') return { kind: 'literal', value: null }\n if (token.value === 'claim') {\n const key = this.parseCallArgument('claim')\n if (!CLAIM_KEY_PATTERN.test(key)) {\n throw new PredicateParseError(`invalid claim key '${key}'`, token.position)\n }\n return { kind: 'claim', key }\n }\n if (token.value === 'capability') {\n throw new PredicateParseError('capability() is boolean-valued and cannot appear in a comparison', token.position)\n }\n if (KEYWORDS.has(token.value) || !IDENTIFIER_PATTERN.test(token.value)) {\n throw new PredicateParseError(`invalid column reference '${token.value}'`, token.position)\n }\n return { kind: 'column', name: token.value }\n }\n\n private parseCallArgument(fn: 'claim' | 'capability'): string {\n this.expect('lparen', `'(' after ${fn}`)\n const argument = this.expect('string', `a quoted key in ${fn}(...)`)\n this.expect('rparen', `')' after ${fn} key`)\n return argument.value\n }\n\n private peek(): Token {\n return this.tokens[this.index] as Token\n }\n\n private peekKeyword(keyword: string): boolean {\n const token = this.peek()\n return token.kind === 'identifier' && token.value === keyword\n }\n\n private matchKeyword(keyword: string): boolean {\n if (!this.peekKeyword(keyword)) return false\n this.advance()\n return true\n }\n\n private advance(): Token {\n const token = this.peek()\n if (token.kind !== 'end') this.index += 1\n return token\n }\n\n private expect(kind: TokenKind, description: string): Token {\n const token = this.peek()\n if (token.kind !== kind) {\n throw new PredicateParseError(`expected ${description}, got '${token.value || 'end'}'`, token.position)\n }\n return this.advance()\n }\n}\n\nexport function parsePredicate(source: string): ParsedPredicate {\n const trimmed = source.trim()\n if (trimmed.length === 0) throw new PredicateParseError('empty predicate', 0)\n return { source: trimmed, ast: new Parser(tokenize(trimmed)).parse() }\n}\n","import { z } from 'zod'\nimport { parsePredicate } from '../predicate/parse.js'\nimport type { ParsedPredicate } from '../predicate/ast.js'\n\nexport const parsedPredicateSchema = z\n .string()\n .transform((source, ctx): ParsedPredicate => {\n try {\n return parsePredicate(source)\n } catch (error) {\n ctx.addIssue({ code: 'custom', message: error instanceof Error ? error.message : String(error) })\n return z.NEVER\n }\n })\n","import { z } from 'zod'\nimport { referencedColumns } from '../predicate/ast.js'\nimport { columnTypeSchema } from './columns.js'\nimport { identifierSchema, tableReferenceSchema } from './identifiers.js'\nimport { parsedPredicateSchema } from './predicates.js'\n\nconst EXECUTES_VERB_PATTERN = /^\\s*(insert|update|delete)\\b/i\n// Dollar-quoting ($tag$…$tag$) isn't handled by the claim/param scanner (it\n// masks single-quoted literals only), so a `:param` or claim()-like text\n// inside one would be silently rewritten. Reject it — app action SQL never\n// needs it.\nconst DOLLAR_QUOTE_PATTERN = /\\$[a-zA-Z0-9_]*\\$/\n// RETURNING is how a `returns:` action populates its declared rows — so it's\n// required when returns is declared and rejected otherwise (an action without\n// returns reports rows_affected only, and a stray RETURNING would just buffer\n// discarded rows).\nconst RETURNING_PATTERN = /\\breturning\\b/i\n// Escape strings (E'…') use backslash escaping the quoted-literal scanner\n// doesn't model — in E'can\\'t :body' the \\' ends the match early and :body is\n// mis-rewritten as a bind placeholder. On string-masked text a surviving\n// `E'`/`e'` can only be an escape-string introducer (every standard literal is\n// already masked away), so reject it there. App action SQL never needs them.\nconst ESCAPE_STRING_PATTERN = /(?<![a-zA-Z0-9_])[Ee]'/\n// A valid claim()/capability() call, once its argument literal is masked to\n// '' — used to strip the good calls so any leftover bare call is malformed.\nconst MASKED_CLAIM_CALL_PATTERN = /\\b(?:claim|capability)\\(\\s*''\\s*\\)/g\n// Any claim()/capability( that survives masking + stripping is malformed\n// (unquoted arg, wrong arity) — it would compile-throw at invoke as a 500.\nconst BARE_CLAIM_CALL_PATTERN = /\\b(?:claim|capability)\\s*\\(/\nconst EXISTS_ENTRY_PATTERN = /^exists\\(\\s*'([^']+)'\\s*,\\s*([a-z][a-z0-9_]*)\\s*\\)$/\nconst NAMED_PARAM_PATTERN = /(?<!:):([a-z][a-z0-9_]*)/g\nconst QUOTED_STRING_PATTERN = /'(?:[^']|'')*'/g\nconst SQL_COMMENT_PATTERN = /--|\\/\\*/\n\nexport const actionParamSchema = z.strictObject({\n type: columnTypeSchema,\n optional: z.boolean().optional(),\n description: z.string().optional(),\n})\n\nexport interface ValidatesEntry {\n readonly source: string\n readonly table: string\n readonly param: string\n}\n\nconst validatesEntrySchema = z\n .string()\n .transform((source, ctx): ValidatesEntry => {\n const match = EXISTS_ENTRY_PATTERN.exec(source.trim())\n if (!match) {\n ctx.addIssue({ code: 'custom', message: \"validates entries must have the shape exists('<table>', <param>)\" })\n return z.NEVER\n }\n const table = tableReferenceSchema.safeParse(match[1])\n if (!table.success) {\n ctx.addIssue({ code: 'custom', message: `invalid table reference '${match[1]}'` })\n return z.NEVER\n }\n return { source: source.trim(), table: table.data, param: match[2] as string }\n })\n\nexport const AUDIT_ACTIONS = ['create', 'update', 'delete'] as const\n\nconst auditSchema = z.strictObject({\n action: z.enum(AUDIT_ACTIONS),\n resource: identifierSchema.optional(),\n})\n\nexport const actionSchema = z\n .strictObject({\n description: z.string().optional(),\n requires: parsedPredicateSchema.optional(),\n params: z.record(identifierSchema, actionParamSchema).optional(),\n validates: z.array(validatesEntrySchema).optional(),\n // One statement, or an ordered list run atomically in the action function.\n executes: z.union([z.string().min(1), z.array(z.string().min(1)).min(1)]),\n // Declares the columns the action's RETURNING yields. Present → the\n // function returns those rows (typed in the client); absent → the action\n // reports rows_affected only. The column names/types must match the\n // RETURNING list, which Postgres enforces at CREATE FUNCTION.\n returns: z.record(identifierSchema, columnTypeSchema).optional(),\n audit: auditSchema.optional(),\n })\n .superRefine((action, ctx) => {\n const params = Object.keys(action.params ?? {})\n if (action.requires && referencedColumns(action.requires.ast).length > 0) {\n ctx.addIssue({\n code: 'custom',\n message: 'requires may reference claims and capabilities only, not columns',\n path: ['requires'],\n })\n }\n for (const issue of executesIssues(action.executes, new Set(params), action.returns !== undefined)) {\n ctx.addIssue({ code: 'custom', message: issue, path: ['executes'] })\n }\n // An empty `returns: {}` would compile to `RETURNS TABLE()` — invalid SQL —\n // and slip through as \"has returns\"; require at least one declared column.\n if (action.returns && Object.keys(action.returns).length === 0) {\n ctx.addIssue({ code: 'custom', message: 'returns must declare at least one column', path: ['returns'] })\n }\n for (const [index, entry] of (action.validates ?? []).entries()) {\n if (!params.includes(entry.param)) {\n ctx.addIssue({\n code: 'custom',\n message: `validates references undeclared param '${entry.param}'`,\n path: ['validates', index],\n })\n }\n }\n })\n\nexport type ActionDefinition = z.output<typeof actionSchema>\n\nexport function extractNamedParams(sql: string): string[] {\n const withoutStrings = sql.replace(QUOTED_STRING_PATTERN, \"''\")\n const names = [...withoutStrings.matchAll(NAMED_PARAM_PATTERN)].map((match) => match[1] as string)\n return [...new Set(names)]\n}\n\n/** One statement, or the ordered list — normalized to trimmed strings. */\nexport function actionStatementSources(executes: string | readonly string[]): string[] {\n return (Array.isArray(executes) ? executes : [executes]).map((statement) => statement.trim())\n}\n\n// The write target of each executes verb — the identifier right after\n// `INSERT INTO` / `UPDATE [ONLY]` / `DELETE FROM [ONLY]`, optionally\n// schema-qualified (last segment wins) and optionally double-quoted. ORM\n// identifiers are lowercase, so a case-insensitive match + lowercase is exact.\nconst WRITE_TARGET_PATTERNS: ReadonlyArray<RegExp> = [\n /^insert\\s+into\\s+(?:\"?[a-z_][a-z0-9_]*\"?\\.)?\"?([a-z_][a-z0-9_]*)\"?/i,\n /^update\\s+(?:only\\s+)?(?:\"?[a-z_][a-z0-9_]*\"?\\.)?\"?([a-z_][a-z0-9_]*)\"?/i,\n /^delete\\s+from\\s+(?:only\\s+)?(?:\"?[a-z_][a-z0-9_]*\"?\\.)?\"?([a-z_][a-z0-9_]*)\"?/i,\n]\n\n/**\n * The tables an action's `executes` statements write to — the `INSERT INTO` /\n * `UPDATE` / `DELETE FROM` targets, in first-seen order, deduped. This is the\n * authoritative write set: an action can touch more than its declaring table\n * (its `executes` may write several), so this reads the statements themselves\n * rather than assuming the owning table. Quoted string literals are masked first\n * so a table name inside a value is never mistaken for a target.\n */\nexport function actionWriteTargets(action: ActionDefinition): string[] {\n const targets: string[] = []\n const seen = new Set<string>()\n for (const statement of actionStatementSources(action.executes)) {\n const masked = statement.replace(QUOTED_STRING_PATTERN, \"''\")\n for (const pattern of WRITE_TARGET_PATTERNS) {\n const match = pattern.exec(masked)\n if (!match) continue\n const table = (match[1] as string).toLowerCase()\n if (!seen.has(table)) {\n seen.add(table)\n targets.push(table)\n }\n break\n }\n }\n return targets\n}\n\nfunction executesIssues(\n executes: string | readonly string[],\n declaredParams: ReadonlySet<string>,\n hasReturns: boolean,\n): string[] {\n const issues: string[] = []\n const statements = actionStatementSources(executes)\n statements.forEach((statement, index) => {\n // Literal-stripped form so `;`/`--`/RETURNING inside a quoted value isn't a false hit.\n const withoutStrings = statement.replace(QUOTED_STRING_PATTERN, \"''\")\n const at = statements.length > 1 ? ` (statement ${index + 1})` : ''\n if (!EXECUTES_VERB_PATTERN.test(statement)) issues.push(`executes must be INSERT, UPDATE, or DELETE${at}`)\n if (withoutStrings.replace(/;\\s*$/, '').includes(';')) issues.push(`each executes entry must be a single statement${at}`)\n if (SQL_COMMENT_PATTERN.test(withoutStrings)) issues.push(`executes must not contain SQL comments${at}`)\n if (DOLLAR_QUOTE_PATTERN.test(withoutStrings)) issues.push(`executes must not use dollar-quoted strings${at}`)\n if (ESCAPE_STRING_PATTERN.test(withoutStrings)) issues.push(`executes must not use escape strings (E'…')${at}`)\n // A double-quoted identifier hides `:param` from the compiler's literal scanner.\n if (withoutStrings.includes('\"')) issues.push(`executes must not use double-quoted identifiers${at}`)\n if (BARE_CLAIM_CALL_PATTERN.test(withoutStrings.replace(MASKED_CLAIM_CALL_PATTERN, ''))) {\n issues.push(`executes has a malformed claim()/capability() call — use e.g. claim('sub')${at}`)\n }\n // RETURNING populates the returns rows, so it belongs on the last statement\n // only, and only when returns is declared.\n if (RETURNING_PATTERN.test(withoutStrings) && !(hasReturns && index === statements.length - 1)) {\n issues.push(\n hasReturns\n ? `only the last executes statement may use RETURNING${at}`\n : `executes must not use RETURNING unless the action declares returns${at}`,\n )\n }\n })\n const last = statements.at(-1)\n if (hasReturns && last && !RETURNING_PATTERN.test(last.replace(QUOTED_STRING_PATTERN, \"''\"))) {\n issues.push('the last executes statement must use RETURNING to populate the declared returns columns')\n }\n const undeclared = extractNamedParams(statements.join('\\n')).filter((name) => !declaredParams.has(name))\n if (undeclared.length > 0) issues.push(`executes references undeclared params: ${undeclared.join(', ')}`)\n return issues\n}\n","import type { ColumnType } from '../schema/columns.js'\n\n/** Definition-surface aliases → Postgres type names as drizzle-kit snapshots them. */\nconst SQL_TYPE_NAMES: Readonly<Partial<Record<ColumnType, string>>> = {\n double: 'double precision',\n timestamptz: 'timestamp with time zone',\n}\n\nexport const sqlTypeName = (type: ColumnType): string => SQL_TYPE_NAMES[type] ?? type\n","/** Claims are stamped per transaction by the Data API (`set_config('request.jwt.claims', …, true)`). */\nexport const CLAIMS_SETTING = 'request.jwt.claims'\n\n/** Claims JSON key holding the caller's granted capability pins (a string array). */\nexport const CAPABILITIES_CLAIM_KEY = 'capabilities'\n\nexport const quoteIdentifier = (name: string): string => `\"${name.replaceAll('\"', '\"\"')}\"`\n\nexport const quoteLiteral = (value: string): string => `'${value.replaceAll(\"'\", \"''\")}'`\n\n/** `nullif(…, '')` because a session that ever set the GUC reverts it to '' (not NULL) after the transaction — ''::jsonb is an error. */\nconst CLAIMS_SOURCE = `nullif(current_setting('${CLAIMS_SETTING}', true), '')::jsonb`\n\nexport const claimExpression = (key: string): string => `(${CLAIMS_SOURCE} ->> ${quoteLiteral(key)})`\n\n/** NULL claims (or a missing capabilities array) coalesce to false — capability checks fail closed. */\nexport const capabilityExpression = (key: string): string =>\n `coalesce(${CLAIMS_SOURCE} -> '${CAPABILITIES_CLAIM_KEY}' ? ${quoteLiteral(key)}, false)`\n","import type { ColumnType } from '../schema/columns.js'\nimport type { CompareOp, Operand, Predicate } from '../predicate/ast.js'\nimport { sqlTypeName } from '../engine/types.js'\nimport { capabilityExpression, claimExpression, quoteIdentifier, quoteLiteral } from './sql.js'\n\nconst SQL_COMPARE_OPS: Readonly<Record<CompareOp, string>> = {\n '=': '=',\n '!=': '<>',\n '<': '<',\n '<=': '<=',\n '>': '>',\n '>=': '>=',\n}\n\n/** Column name → declared type, so claim comparisons can cast to the column's side. */\nexport type PredicateColumnTypes = Readonly<Record<string, ColumnType>>\n\nfunction compileOperand(operand: Operand, other: Operand, columnTypes?: PredicateColumnTypes): string {\n if (operand.kind === 'column') return quoteIdentifier(operand.name)\n if (operand.kind === 'claim') {\n const expression = claimExpression(operand.key)\n // Claims extract as text; comparing against a typed column (uuid = text\n // has no operator) needs the claim cast to the column's declared type. A\n // NULL claim stays NULL through the cast, so the policy still fails closed.\n const columnType = other.kind === 'column' ? columnTypes?.[other.name] : undefined\n return columnType && columnType !== 'text' ? `(${expression})::${sqlTypeName(columnType)}` : expression\n }\n const { value } = operand\n if (value === null) return 'NULL'\n if (typeof value === 'string') return quoteLiteral(value)\n return String(value)\n}\n\nfunction compileComparison(op: CompareOp, left: Operand, right: Operand, columnTypes?: PredicateColumnTypes): string {\n const nullSide = left.kind === 'literal' && left.value === null ? right : right.kind === 'literal' && right.value === null ? left : null\n if (nullSide && (op === '=' || op === '!=')) {\n return `${compileOperand(nullSide, nullSide, columnTypes)} IS${op === '!=' ? ' NOT' : ''} NULL`\n }\n return `${compileOperand(left, right, columnTypes)} ${SQL_COMPARE_OPS[op]} ${compileOperand(right, left, columnTypes)}`\n}\n\n/** Predicate AST → a parenthesized SQL boolean expression. Never interpolates raw policy text. */\nexport function compilePredicate(predicate: Predicate, columnTypes?: PredicateColumnTypes): string {\n switch (predicate.kind) {\n case 'and':\n case 'or': {\n const joined = predicate.operands.map((operand) => compilePredicate(operand, columnTypes)).join(` ${predicate.kind.toUpperCase()} `)\n return `(${joined})`\n }\n case 'not':\n return `(NOT ${compilePredicate(predicate.operand, columnTypes)})`\n case 'compare':\n return `(${compileComparison(predicate.op, predicate.left, predicate.right, columnTypes)})`\n case 'capability':\n return `(${capabilityExpression(predicate.key)})`\n }\n}\n","import { z } from 'zod'\nimport { CAPABILITY_KEY_PATTERN, CLAIM_KEY_PATTERN } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { actionStatementSources, type ActionDefinition } from '../schema/actions.js'\nimport type { ColumnType } from '../schema/columns.js'\nimport { compilePredicate } from './predicates.js'\nimport { capabilityExpression, claimExpression } from './sql.js'\n\n/**\n * Action definitions → the pure pieces the apply-time function generator and\n * the executor need: a zod schema for the request params, the executes body\n * with `claim()`/`capability()` rewritten to the compiled claims expressions\n * and each `:param` rewritten to its plpgsql argument name, the declared\n * param order, and the compiled `requires` gate. Raw action text never reaches\n * SQL unrewritten.\n */\n\nconst QUOTED_STRING_PATTERN = /'(?:[^']|'')*'/g\n/**\n * One scan, leftmost-wins: a claim/capability call (whose argument is itself a\n * quoted literal) matches before the bare-literal alternative, while a literal\n * that merely CONTAINS call-looking text is consumed whole and left verbatim.\n */\nconst TOKEN_PATTERN =\n /\\bclaim\\(\\s*'((?:[^']|'')*)'\\s*\\)|\\bcapability\\(\\s*'((?:[^']|'')*)'\\s*\\)|'(?:[^']|'')*'|(?<!:):([a-z][a-z0-9_]*)/g\nconst BARE_CALL_PATTERN = /\\b(?:claim|capability)\\s*\\(/\n\n/**\n * Param schemas are a SHAPE contract for the JSON body, never value grammars\n * — values reach Postgres as bind parameters and the column's input function\n * is the authority (a bad uuid/number/date fails there as the caller's 400).\n * Every scalar also accepts its string form so exact bigint/numeric values\n * survive JSON's float bottleneck.\n */\nconst PARAM_SCHEMAS: Readonly<Record<ColumnType, z.ZodType>> = {\n uuid: z.string(),\n text: z.string(),\n integer: z.union([z.number(), z.string()]),\n bigint: z.union([z.number(), z.string()]),\n numeric: z.union([z.number(), z.string()]),\n double: z.union([z.number(), z.string()]),\n boolean: z.union([z.boolean(), z.string()]),\n timestamptz: z.string(),\n date: z.string(),\n jsonb: z.unknown(),\n}\n\nexport function buildActionParamsSchema(action: ActionDefinition): z.ZodType<Record<string, unknown>> {\n const shape: Record<string, z.ZodType> = {}\n const entries = Object.entries(action.params ?? {})\n for (const [name, param] of entries) {\n // Optional → nullish so an explicit JSON null (a nullable FK cleared to\n // NULL) is accepted, not just an omitted key.\n shape[name] = param.optional ? PARAM_SCHEMAS[param.type].nullish() : PARAM_SCHEMAS[param.type]\n }\n return z.strictObject(shape).superRefine((obj, ctx) => {\n // jsonb's z.unknown() treats an absent key as valid, so a REQUIRED jsonb\n // param could be omitted and bound as SQL NULL — enforce presence here\n // (every other required scalar's schema already rejects undefined).\n for (const [name, param] of entries) {\n if (!param.optional && param.type === 'jsonb' && (obj as Record<string, unknown>)[name] === undefined) {\n ctx.addIssue({ code: 'custom', message: 'Required', path: [name] })\n }\n }\n }) as z.ZodType<Record<string, unknown>>\n}\n\n/** Declared param names in signature order — the function's arg order and the executor's positional-call order. */\nexport const actionParamOrder = (action: ActionDefinition): string[] => Object.keys(action.params ?? {})\n\n/** The plpgsql argument name for a declared param — prefixed so it can never collide with a column of the same name inside the executes body. */\nexport const actionParamArg = (name: string): string => `p_${name}`\n\n/**\n * Compile an action's `executes` (one statement or the ordered list) into the\n * statements of its Postgres function body: `claim('x')`/`capability('k')`\n * become the compiled fail-closed claims expressions (the same SQL policies\n * use), and each `:param` becomes its `p_<name>` plpgsql argument — quoted\n * literals pass through verbatim. A call shape outside the grammar (bad quoting,\n * wrong args) fails loudly here; the build also rejects it in `executesIssues`.\n */\nexport function compileActionStatements(\n action: ActionDefinition,\n renderParam: (name: string) => string = actionParamArg,\n): string[] {\n return actionStatementSources(action.executes).map((statement) => compileStatement(statement, renderParam))\n}\n\nfunction compileStatement(sql: string, renderParam: (name: string) => string): string {\n const compiled = sql.replace(TOKEN_PATTERN, (token, claimKey?: string, capabilityKey?: string, paramName?: string) => {\n if (claimKey !== undefined) {\n if (!CLAIM_KEY_PATTERN.test(claimKey)) throw new OrmDefinitionError(`invalid claim key in executes: ${token}`)\n return claimExpression(claimKey)\n }\n if (capabilityKey !== undefined) {\n if (!CAPABILITY_KEY_PATTERN.test(capabilityKey)) {\n throw new OrmDefinitionError(`invalid capability key in executes: ${token}`)\n }\n return capabilityExpression(capabilityKey)\n }\n if (paramName !== undefined) return renderParam(paramName)\n return token\n })\n\n // Literals are masked first so text inside them stays inert; a surviving\n // call shape is malformed (valid calls were rewritten away).\n if (BARE_CALL_PATTERN.test(compiled.replace(QUOTED_STRING_PATTERN, \"''\"))) {\n throw new OrmDefinitionError('executes contains a claim()/capability() call outside the grammar')\n }\n return compiled\n}\n\n/** Compiled `requires` gate — a SQL boolean over the transaction claims, or null when unguarded. */\nexport function compileActionRequires(action: ActionDefinition): string | null {\n return action.requires ? compilePredicate(action.requires.ast) : null\n}\n\n/** Capability keys referenced across the executes statements (same scan the rewrite uses). */\nexport function referencedExecuteCapabilities(action: ActionDefinition): string[] {\n const keys: string[] = []\n for (const statement of actionStatementSources(action.executes)) {\n for (const match of statement.matchAll(TOKEN_PATTERN)) {\n if (match[2] !== undefined) keys.push(match[2])\n }\n }\n return keys\n}\n","import { consumerRoleName, ormSchemaName } from '../constants.js'\nimport {\n actionParamArg,\n actionParamOrder,\n compileActionRequires,\n compileActionStatements,\n} from '../compiler/actions.js'\nimport { quoteIdentifier, quoteLiteral } from '../compiler/sql.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport type { ActionDefinition, ValidatesEntry } from '../schema/actions.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport { sqlTypeName } from './types.js'\n\n/**\n * SQLSTATEs the action function raises for the two application-level denials\n * that Postgres has no native code for. Custom 5-char classes (unused by\n * Postgres) so the executor maps them precisely: requires → 403, validates →\n * 422. RLS `WITH CHECK`, constraints, and bad values keep their native codes.\n */\nexport const ACTION_REQUIRES_DENIED_SQLSTATE = 'ORMRQ'\nexport const ACTION_VALIDATES_FAILED_SQLSTATE = 'ORMVL'\n\n/** Internal function name for a declared action — the `action_` prefix is what the reconcile sweep drops. */\nexport const actionFunctionName = (actionName: string): string => `action_${actionName}`\n\n/**\n * A returns action's final statement, re-projected into the declared `returns`\n * order by column name. `RETURN QUERY` binds the row's columns to the RETURNS\n * TABLE out-params positionally, so trusting the author's RETURNING order would\n * mislabel columns; wrapping in a CTE and selecting the declared names binds by\n * name instead — order-independent, and works with an explicit RETURNING list or\n * `RETURNING *`. PREPARE runs this same form so a declared column the RETURNING\n * doesn't produce fails the apply.\n */\nfunction returnProjection(returns: NonNullable<ActionDefinition['returns']>, lastStatement: string): string {\n const projection = Object.keys(returns).map(quoteIdentifier).join(', ')\n return `WITH orm_returning AS (${lastStatement}) SELECT ${projection} FROM orm_returning`\n}\n\ninterface NamedAction {\n readonly name: string\n readonly action: ActionDefinition\n}\n\nconst allActions = (definition: NamespaceDefinition): NamedAction[] =>\n definition.tables\n .flatMap((table) => Object.entries(table.actions ?? {}).map(([name, action]) => ({ name, action })))\n .sort((a, b) => a.name.localeCompare(b.name))\n\n/**\n * Every declared action becomes a `SECURITY INVOKER` Postgres function, so the\n * apply-time `CREATE FUNCTION` is where Postgres validates the SQL (with\n * `check_function_bodies` on, a bad column/table reference fails the apply and\n * the action never goes live) and the invoke path is a single `SELECT fn(...)`\n * under the consumer role — no client-side statement rewriting at call time.\n *\n * Actions carry no data and are absent from the drizzle snapshot, so instead\n * of diffing them we reconcile: a leading sweep drops every `action_*` function\n * in the schema (clearing removed/renamed/retyped ones — a signature change\n * can't `CREATE OR REPLACE`), then each current action is created fresh. Runs\n * last in the plan because the bodies reference tables the earlier DDL creates.\n */\nexport function actionFunctionStatements(definition: NamespaceDefinition): string[] {\n const schema = ormSchemaName(definition.namespace)\n return [dropAllActionFunctions(schema), ...allActions(definition).flatMap(({ name, action }) => createActionFunction(definition, name, action))]\n}\n\n/**\n * PREPARE each action's executes at apply so Postgres parses and plans it\n * against the live schema — catching unknown columns/tables/types that a\n * plpgsql function body does NOT check at CREATE (it defers to first invoke).\n * A failed PREPARE aborts the apply, so a broken action never goes live. Runs\n * on the migration connection with the namespace on search_path; the prepared\n * statements die with that connection, so no DEALLOCATE is needed.\n */\nexport function actionPrepareChecks(definition: NamespaceDefinition): string[] {\n const actions = allActions(definition)\n if (actions.length === 0) return []\n const statements = [`SET LOCAL search_path TO ${quoteIdentifier(ormSchemaName(definition.namespace))}`]\n for (const { name, action } of actions) {\n const order = actionParamOrder(action)\n const signature = order.length > 0 ? ` (${order.map((param) => sqlTypeName(action.params![param]!.type)).join(', ')})` : ''\n const compiled = compileActionStatements(action, (param) => `$${order.indexOf(param) + 1}`)\n compiled.forEach((sql, index) => {\n // The last statement of a returns action is prepared through the same\n // re-projection the function uses, so a declared column its RETURNING\n // omits fails here at apply, not at first invoke.\n const checked = action.returns && index === compiled.length - 1 ? returnProjection(action.returns, sql) : sql\n statements.push(`PREPARE ${quoteIdentifier(`orm_check_${name}_${index}`)}${signature} AS ${checked}`)\n })\n }\n return statements\n}\n\n/**\n * Drop every `action_*` function in the namespace schema before recreating the\n * current set. The schema holds only ORM-created objects, so the prefix match\n * is exact enough; `\\_` escapes the underscore so it can't widen to `actionX`.\n */\nfunction dropAllActionFunctions(schema: string): string {\n return `DO $orm_reconcile_actions$\nDECLARE\n r record;\nBEGIN\n FOR r IN\n SELECT p.oid::regprocedure AS sig\n FROM pg_catalog.pg_proc p\n JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace\n WHERE n.nspname = ${quoteLiteral(schema)} AND p.proname LIKE 'action\\\\_%'\n LOOP\n EXECUTE 'DROP FUNCTION ' || r.sig;\n END LOOP;\nEND\n$orm_reconcile_actions$`\n}\n\nfunction createActionFunction(definition: NamespaceDefinition, name: string, action: ActionDefinition): string[] {\n const schema = quoteIdentifier(ormSchemaName(definition.namespace))\n const fn = `${schema}.${quoteIdentifier(actionFunctionName(name))}`\n const order = actionParamOrder(action)\n const signature = order\n .map((paramName) => `${quoteIdentifier(actionParamArg(paramName))} ${sqlTypeName(action.params![paramName]!.type)}`)\n .join(', ')\n const argTypes = order.map((paramName) => sqlTypeName(action.params![paramName]!.type)).join(', ')\n const role = quoteIdentifier(consumerRoleName(definition.namespace))\n\n // The executes statements run in order; the last one carries the result —\n // its RETURNING for a returns action, its ROW_COUNT for a count action.\n const statements = compileActionStatements(action)\n const last = statements[statements.length - 1] as string\n const leading = statements.slice(0, -1).map((statement) => ` ${statement};`)\n const create = action.returns\n ? // RETURNS TABLE + RETURN QUERY over the declared-order re-projection.\n `CREATE FUNCTION ${fn}(${signature})\nRETURNS TABLE(${Object.entries(action.returns)\n .map(([column, type]) => `${quoteIdentifier(column)} ${sqlTypeName(type)}`)\n .join(', ')})\nLANGUAGE plpgsql\nSECURITY INVOKER\nSET search_path = ${schema}\nAS $orm_action$\n-- RETURNS TABLE names OUT params (id, …) that collide with the re-projection's\n-- columns; resolve unqualified names to the column.\n#variable_conflict use_column\nBEGIN\n${[functionGuards(definition, name, action), ...leading, ` RETURN QUERY ${returnProjection(action.returns, last)};`].filter(Boolean).join('\\n')}\nEND\n$orm_action$`\n : // No returns: report the last statement's affected count.\n `CREATE FUNCTION ${fn}(${signature})\nRETURNS bigint\nLANGUAGE plpgsql\nSECURITY INVOKER\nSET search_path = ${schema}\nAS $orm_action$\nDECLARE\n v_count bigint;\nBEGIN\n${[functionGuards(definition, name, action), ...leading, ` ${last};`].filter(Boolean).join('\\n')}\n GET DIAGNOSTICS v_count = ROW_COUNT;\n RETURN v_count;\nEND\n$orm_action$`\n\n // Least privilege: only the namespace consumer role (what the executor\n // SET LOCAL ROLEs into) may invoke; the body still runs INVOKER, so RLS\n // and WITH CHECK bind it exactly as a direct statement would.\n return [\n create,\n `REVOKE ALL ON FUNCTION ${fn}(${argTypes}) FROM PUBLIC`,\n `GRANT EXECUTE ON FUNCTION ${fn}(${argTypes}) TO ${role}`,\n ]\n}\n\n/** The requires gate + validates probes that precede the mutation, in that order. */\nfunction functionGuards(definition: NamespaceDefinition, name: string, action: ActionDefinition): string {\n const lines: string[] = []\n\n const requires = compileActionRequires(action)\n if (requires) {\n // An unauthorized caller must be rejected before any validates probe can\n // leak valid-vs-invalid ids.\n lines.push(\n ` IF NOT (${requires}) THEN`,\n ` RAISE EXCEPTION 'action ${name} requires a grant the caller does not hold' USING ERRCODE = ${quoteLiteral(ACTION_REQUIRES_DENIED_SQLSTATE)};`,\n ` END IF;`,\n )\n }\n\n for (const entry of action.validates ?? []) {\n const { schema, table, key } = resolveValidatesTarget(definition, entry)\n const arg = quoteIdentifier(actionParamArg(entry.param))\n // Omitted/null optional params skip the check; FOR SHARE holds the row so\n // the soft link can't dangle before commit. RLS scopes the probe to what\n // the caller may see — the FK-like semantic, no cross-row oracle.\n lines.push(\n ` IF ${arg} IS NOT NULL AND NOT EXISTS (SELECT 1 FROM ${quoteIdentifier(schema)}.${quoteIdentifier(table)} WHERE ${quoteIdentifier(key)} = ${arg} FOR SHARE) THEN`,\n ` RAISE EXCEPTION 'validates failed: no ${entry.table} row for ${entry.param}' USING ERRCODE = ${quoteLiteral(ACTION_VALIDATES_FAILED_SQLSTATE)};`,\n ` END IF;`,\n )\n }\n\n return lines.join('\\n')\n}\n\nfunction resolveValidatesTarget(\n definition: NamespaceDefinition,\n entry: ValidatesEntry,\n): { schema: string; table: string; key: string } {\n if (entry.table.includes('.')) {\n const [schema, table] = entry.table.split('.') as [string, string]\n return { schema, table, key: 'id' }\n }\n const target = definition.tables.find((table) => table.table === entry.table)\n const key = target && Object.entries(target.columns ?? {}).find(([, column]) => column.primary_key)?.[0]\n if (!target || !key) {\n // buildNamespaceDefinition already rejects unknown and synced targets, so\n // this is a belt for a target reachable only through a direct compile.\n throw new OrmDefinitionError(`action validates target '${entry.table}' is not a local table with a primary key`)\n }\n return { schema: ormSchemaName(definition.namespace), table: entry.table, key }\n}\n","import { z } from 'zod'\nimport {\n MAX_IDENTIFIER_LENGTH,\n RESERVED_COLUMN_NAMES,\n RESERVED_TABLE_NAMES,\n SYNCED_SOURCE_PATTERN,\n} from '../constants.js'\nimport { referencedColumns, walkPredicate, type Operand } from '../predicate/ast.js'\nimport { actionSchema } from './actions.js'\nimport { castParts, columnSchema, type ColumnType } from './columns.js'\nimport { identifierSchema, namespaceSchema, tableReferenceSchema } from './identifiers.js'\nimport { parsedPredicateSchema } from './predicates.js'\n\nconst linkSchema = z.strictObject({\n to: tableReferenceSchema,\n on: identifierSchema,\n enforce: z.boolean().optional(),\n description: z.string().optional(),\n})\n\n// No column-count or index-count caps — Postgres's own INDEX_MAX_KEYS is the\n// authority and CREATE INDEX fails loudly past it.\nconst indexSchema = z\n .union([\n z.array(identifierSchema).min(1),\n z.strictObject({\n columns: z.array(identifierSchema).min(1),\n unique: z.boolean().optional(),\n name: identifierSchema.optional(),\n }),\n ])\n .transform((index) => (Array.isArray(index) ? { columns: index } : index))\n\nconst policiesSchema = z.strictObject({\n read: parsedPredicateSchema.optional(),\n write: parsedPredicateSchema.optional(),\n})\n\nexport const tableFileSchema = z\n .strictObject({\n namespace: namespaceSchema,\n table: identifierSchema,\n description: z.string().optional(),\n columns: z.record(identifierSchema, columnSchema).optional(),\n source: z.string().regex(SYNCED_SOURCE_PATTERN, 'source must reference a gold-layer table').optional(),\n links: z.record(identifierSchema, linkSchema).optional(),\n indexes: z.array(indexSchema).optional(),\n policies: policiesSchema.optional(),\n actions: z.record(identifierSchema, actionSchema).optional(),\n })\n .superRefine((table, ctx) => {\n if (RESERVED_TABLE_NAMES.has(table.table)) {\n ctx.addIssue({ code: 'custom', message: `'${table.table}' is a reserved table name`, path: ['table'] })\n }\n for (const name of Object.keys(table.columns ?? {})) {\n if (RESERVED_COLUMN_NAMES.has(name)) {\n ctx.addIssue({\n code: 'custom',\n message: `column '${name}' collides with the Data API's reserved query parameters (select, order, limit, offset) — it could never be filtered`,\n path: ['columns', name],\n })\n }\n }\n if (table.source) validateSyncedTable(table, ctx)\n else validateColumnTable(table, ctx)\n validateLinks(table, ctx)\n validatePolicyColumns(table, ctx)\n validateDerivedNameLengths(table, ctx)\n })\n\nexport type TableFile = z.output<typeof tableFileSchema>\nexport type LinkDefinition = z.output<typeof linkSchema>\nexport type IndexDefinition = z.output<typeof indexSchema>\n\n/** The physical index name — explicit, or derived from table + columns. One formula for the builder and the namespace-wide uniqueness check. */\nexport const indexName = (table: string, definition: IndexDefinition): string =>\n definition.name ?? `ix_${table}_${definition.columns.join('_')}`\n\n/** Row-policy name the security pass owns per table — `<table>_<suffix>`. One formula for the emitter and the load-time length check. */\nexport const policyName = (table: string, suffix: string): string => `${table}_${suffix}`\n\n/** Enforced-link FK constraint name — one formula for the engine builder and the load-time length check. */\nexport const foreignKeyName = (table: string, link: string): string => `fk_${table}_${link}`\n\ntype RefineCtx = { addIssue: (issue: { code: 'custom'; message: string; path?: (string | number)[] }) => void }\n\nfunction validateSyncedTable(table: TableFile, ctx: RefineCtx): void {\n const forbidden: Array<[keyof TableFile, string]> = [\n ['columns', 'synced tables reflect their source; columns are not declared'],\n ['actions', 'synced tables are read-only; actions are not allowed'],\n ['indexes', 'synced tables are system-owned; indexes are not allowed'],\n ]\n for (const [field, message] of forbidden) {\n if (table[field] !== undefined) ctx.addIssue({ code: 'custom', message, path: [field] })\n }\n if (table.policies?.write) {\n ctx.addIssue({ code: 'custom', message: 'synced tables are read-only', path: ['policies', 'write'] })\n }\n}\n\nfunction validateRenames(\n columns: NonNullable<TableFile['columns']>,\n names: readonly string[],\n ctx: RefineCtx,\n): void {\n const renameSources = new Map<string, string>()\n for (const name of names) {\n const renamedFrom = columns[name]?.renamed_from\n if (!renamedFrom) continue\n if (renamedFrom === name || names.includes(renamedFrom)) {\n ctx.addIssue({\n code: 'custom',\n message: 'renamed_from must name a column that no longer exists',\n path: ['columns', name, 'renamed_from'],\n })\n }\n // Two columns claiming the same source would make the rename migration ambiguous.\n const claimed = renameSources.get(renamedFrom)\n if (claimed) {\n ctx.addIssue({\n code: 'custom',\n message: `renamed_from '${renamedFrom}' is already claimed by '${claimed}'`,\n path: ['columns', name, 'renamed_from'],\n })\n }\n renameSources.set(renamedFrom, name)\n }\n}\n\nfunction validateColumnTable(table: TableFile, ctx: RefineCtx): void {\n const columns = table.columns ?? {}\n const names = Object.keys(columns)\n if (names.length === 0) {\n ctx.addIssue({ code: 'custom', message: 'a table must declare columns or a source', path: ['columns'] })\n return\n }\n\n const primaryKeys = names.filter((name) => columns[name]?.primary_key)\n if (primaryKeys.length !== 1) {\n ctx.addIssue({ code: 'custom', message: 'exactly one column must be primary_key', path: ['columns'] })\n }\n\n validateRenames(columns, names, ctx)\n for (const name of names) {\n const column = columns[name]\n if (!column) continue\n const cast = column.cast ? castParts(column.cast) : null\n if (column.cast && cast?.column !== name) {\n ctx.addIssue({\n code: 'custom',\n message: 'cast must reference the column it is declared on',\n path: ['columns', name, 'cast'],\n })\n }\n if (cast && cast.type !== column.type) {\n ctx.addIssue({\n code: 'custom',\n message: `cast target '${cast.type}' must match the declared type '${column.type}'`,\n path: ['columns', name, 'cast'],\n })\n }\n }\n\n for (const [position, index] of (table.indexes ?? []).entries()) {\n if (new Set(index.columns).size !== index.columns.length) {\n ctx.addIssue({\n code: 'custom',\n message: 'index names a column more than once',\n path: ['indexes', position],\n })\n }\n for (const column of index.columns) {\n if (!names.includes(column)) {\n ctx.addIssue({\n code: 'custom',\n message: `index references unknown column '${column}'`,\n path: ['indexes', position],\n })\n }\n }\n }\n}\n\nfunction validateLinks(table: TableFile, ctx: RefineCtx): void {\n const columnNames = Object.keys(table.columns ?? {})\n for (const [name, link] of Object.entries(table.links ?? {})) {\n if (!table.source && !columnNames.includes(link.on)) {\n ctx.addIssue({ code: 'custom', message: `link references unknown column '${link.on}'`, path: ['links', name, 'on'] })\n }\n if (link.enforce && link.to.includes('.')) {\n ctx.addIssue({\n code: 'custom',\n message: 'enforce is only valid for links inside the namespace; cross-boundary links stay soft',\n path: ['links', name, 'enforce'],\n })\n }\n if (link.enforce && table.source) {\n ctx.addIssue({\n code: 'custom',\n message: 'a synced table cannot enforce foreign keys — its DDL is owned by the sync',\n path: ['links', name, 'enforce'],\n })\n }\n }\n}\n\n/**\n * Postgres silently truncates identifiers past 63 bytes, so an over-long\n * derived name would collide or drift from what the engine thinks it created.\n * Fail at load instead. Explicit names are already capped by identifierSchema;\n * only the derived formulas can overflow.\n */\nfunction validateDerivedNameLengths(table: TableFile, ctx: RefineCtx): void {\n const worstPolicy = policyName(table.table, 'insert')\n if (!table.source && worstPolicy.length > MAX_IDENTIFIER_LENGTH) {\n ctx.addIssue({\n code: 'custom',\n message: `table name is too long — the derived policy name '${worstPolicy}' exceeds Postgres's ${MAX_IDENTIFIER_LENGTH}-byte identifier limit`,\n path: ['table'],\n })\n }\n for (const [position, index] of (table.indexes ?? []).entries()) {\n const name = indexName(table.table, index)\n if (name.length > MAX_IDENTIFIER_LENGTH) {\n ctx.addIssue({\n code: 'custom',\n message: `derived index name '${name}' exceeds Postgres's ${MAX_IDENTIFIER_LENGTH}-byte identifier limit — set a shorter explicit name`,\n path: ['indexes', position],\n })\n }\n }\n for (const [name, link] of Object.entries(table.links ?? {})) {\n const constraint = foreignKeyName(table.table, name)\n if (link.enforce && constraint.length > MAX_IDENTIFIER_LENGTH) {\n ctx.addIssue({\n code: 'custom',\n message: `derived foreign-key name '${constraint}' exceeds Postgres's ${MAX_IDENTIFIER_LENGTH}-byte identifier limit — shorten the link or table name`,\n path: ['links', name],\n })\n }\n }\n for (const name of Object.keys(table.actions ?? {})) {\n // Each action compiles to an `action_<name>` Postgres function.\n const fnName = `action_${name}`\n if (fnName.length > MAX_IDENTIFIER_LENGTH) {\n ctx.addIssue({\n code: 'custom',\n message: `derived action function name '${fnName}' exceeds Postgres's ${MAX_IDENTIFIER_LENGTH}-byte identifier limit — shorten the action name`,\n path: ['actions', name],\n })\n }\n }\n}\n\n/** Comparability groups — Postgres compares freely within a group, errors across them. One helper shared with link/param checks. */\nconst TYPE_GROUPS: Readonly<Record<ColumnType, 'numeric' | 'text' | 'uuid' | 'temporal' | 'boolean' | 'jsonb'>> = {\n integer: 'numeric',\n bigint: 'numeric',\n numeric: 'numeric',\n double: 'numeric',\n text: 'text',\n uuid: 'uuid',\n date: 'temporal',\n timestamptz: 'temporal',\n boolean: 'boolean',\n jsonb: 'jsonb',\n}\n\nexport const columnTypeGroup = (type: ColumnType): string => TYPE_GROUPS[type]\n\nfunction validatePolicyColumns(table: TableFile, ctx: RefineCtx): void {\n if (table.source) return\n const columns = table.columns ?? {}\n const columnNames = Object.keys(columns)\n for (const kind of ['read', 'write'] as const) {\n const predicate = table.policies?.[kind]\n if (!predicate) continue\n for (const column of referencedColumns(predicate.ast)) {\n if (!columnNames.includes(column)) {\n ctx.addIssue({\n code: 'custom',\n message: `policy references unknown column '${column}'`,\n path: ['policies', kind],\n })\n }\n }\n walkPredicate(predicate.ast, (node) => {\n if (node.kind !== 'compare') return\n const issue = comparisonTypeIssue(node.left, node.right, columns)\n if (issue) ctx.addIssue({ code: 'custom', message: issue, path: ['policies', kind] })\n })\n }\n}\n\n/**\n * A comparison that can never type-check in Postgres fails at load, not at\n * CREATE POLICY. Claims are exempt — the compiler casts them to the column's\n * declared type — and NULL literals compile to IS [NOT] NULL.\n */\nfunction comparisonTypeIssue(\n left: Operand,\n right: Operand,\n columns: NonNullable<TableFile['columns']>,\n): string | null {\n const groupOf = (operand: Operand): string | null =>\n operand.kind === 'column' ? (columns[operand.name] ? TYPE_GROUPS[columns[operand.name]!.type] : null) : null\n\n if (left.kind === 'column' && right.kind === 'column') {\n const leftGroup = groupOf(left)\n const rightGroup = groupOf(right)\n if (leftGroup && rightGroup && leftGroup !== rightGroup) {\n return `policy compares '${left.name}' (${columns[left.name]!.type}) with '${right.name}' (${columns[right.name]!.type}) — incomparable types`\n }\n return null\n }\n\n const column = left.kind === 'column' ? left : right.kind === 'column' ? right : null\n const literal = left.kind === 'literal' ? left : right.kind === 'literal' ? right : null\n if (!column || !literal || literal.value === null) return null\n const columnGroup = groupOf(column)\n if (!columnGroup) return null\n // Quoted literals are unknown-typed and coerce through the column's input\n // function, whose grammar is richer than any client-side mirror ('+1',\n // '.5', 'NaN', PG16 digit separators, uuid brace forms, boolean prefixes).\n // A malformed value fails loudly at apply — never falsely rejected here.\n if (typeof literal.value === 'string') return null\n const literalGroup = typeof literal.value === 'number' ? 'numeric' : 'boolean'\n if (literalGroup !== columnGroup) {\n return `policy compares '${column.name}' (${columns[column.name]!.type}) with a ${typeof literal.value} literal — incomparable types`\n }\n return null\n}\n","import { consumerRoleName, ormSchemaName } from '../constants.js'\nimport { compilePredicate } from '../compiler/predicates.js'\nimport { quoteIdentifier } from '../compiler/sql.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport { policyName as derivePolicyName, type TableFile } from '../schema/table.js'\n\nexport const CONSUMER_TABLE_PRIVILEGES = ['SELECT', 'INSERT', 'UPDATE', 'DELETE'] as const\n\n/**\n * Policy names we own per table. `write` is the legacy single-policy name —\n * dropped on every apply so pre-split schemas converge.\n */\nconst POLICY_SUFFIXES = ['read', 'insert', 'update', 'delete', 'write'] as const\n\n/**\n * The security statements the kit never sees — FORCE row security (so\n * policies bind the table owner too), the row policies themselves, and the\n * grants that let the Data API's consumer role reach the namespace.\n *\n * Policies deliberately bypass drizzle-kit's diff: its API resolves\n * create+drop pairs interactively (fatal in a service), and they are cheap\n * and fully determined by the definition — so every apply drops and\n * recreates them. Writes compile to command-scoped policies, never FOR ALL:\n * permissive policies OR together, so an all-commands policy would let\n * write-capable callers SELECT rows the read policy hides.\n */\nexport function securityStatements(definition: NamespaceDefinition): string[] {\n const schema = quoteIdentifier(ormSchemaName(definition.namespace))\n const role = quoteIdentifier(consumerRoleName(definition.namespace))\n const tables = columnTables(definition)\n\n const force = tables.map(\n (table) => `ALTER TABLE ${schema}.${quoteIdentifier(table.table)} FORCE ROW LEVEL SECURITY`,\n )\n const policies = tables.flatMap((table) => policyStatements(schema, table))\n const grants = tables.map(\n (table) =>\n `GRANT ${CONSUMER_TABLE_PRIVILEGES.join(', ')} ON ${schema}.${quoteIdentifier(table.table)} TO ${role}`,\n )\n return [...force, ...policies, `GRANT USAGE ON SCHEMA ${schema} TO ${role}`, ...grants]\n}\n\n/**\n * Drop every owned policy on the given (already existing) tables. Runs before\n * hints and DDL so a column referenced by an installed policy can be cast or\n * dropped — Postgres refuses to alter a column a live policy depends on.\n */\nexport function policyDropStatements(schemaName: string, tables: readonly string[]): string[] {\n const schema = quoteIdentifier(schemaName)\n return tables.flatMap((table) =>\n POLICY_SUFFIXES.map(\n (suffix) => `DROP POLICY IF EXISTS ${quoteIdentifier(derivePolicyName(table, suffix))} ON ${schema}.${quoteIdentifier(table)}`,\n ),\n )\n}\n\nfunction policyStatements(schema: string, table: TableFile): string[] {\n const qualified = `${schema}.${quoteIdentifier(table.table)}`\n const policyName = (suffix: string) => quoteIdentifier(derivePolicyName(table.table, suffix))\n const statements = POLICY_SUFFIXES.map((suffix) => `DROP POLICY IF EXISTS ${policyName(suffix)} ON ${qualified}`)\n const columnTypes = Object.fromEntries(\n Object.entries(table.columns ?? {}).map(([name, column]) => [name, column.type]),\n )\n\n const read = table.policies?.read\n if (read) {\n statements.push(`CREATE POLICY ${policyName('read')} ON ${qualified} FOR SELECT USING (${compilePredicate(read.ast, columnTypes)})`)\n }\n const write = table.policies?.write\n if (write) {\n const predicate = compilePredicate(write.ast, columnTypes)\n statements.push(`CREATE POLICY ${policyName('insert')} ON ${qualified} FOR INSERT WITH CHECK (${predicate})`)\n statements.push(\n `CREATE POLICY ${policyName('update')} ON ${qualified} FOR UPDATE USING (${predicate}) WITH CHECK (${predicate})`,\n )\n statements.push(`CREATE POLICY ${policyName('delete')} ON ${qualified} FOR DELETE USING (${predicate})`)\n }\n return statements\n}\n\nexport const columnTables = (definition: NamespaceDefinition): TableFile[] =>\n definition.tables.filter((table) => !table.source)\n","import { sql } from 'drizzle-orm'\nimport {\n bigint,\n boolean,\n date,\n doublePrecision,\n integer,\n jsonb,\n numeric,\n text,\n timestamp,\n uuid,\n} from 'drizzle-orm/pg-core'\nimport { isFunctionDefault, type ColumnDefinition, type ColumnType } from '../schema/columns.js'\n\ntype ColumnFactory = (name: string) => ColumnBuilder\n\ninterface ColumnBuilder {\n primaryKey(): ColumnBuilder\n notNull(): ColumnBuilder\n unique(): ColumnBuilder\n default(value: unknown): ColumnBuilder\n}\n\nconst FACTORIES: Readonly<Record<ColumnType, ColumnFactory>> = {\n uuid: (name) => uuid(name),\n text: (name) => text(name),\n integer: (name) => integer(name),\n // Mode 'bigint' keeps int8 lossless — mode 'number' silently rounds past\n // 2^53. The read executor serializes BigInt to string for JSON.\n bigint: (name) => bigint(name, { mode: 'bigint' }),\n numeric: (name) => numeric(name),\n double: (name) => doublePrecision(name),\n boolean: (name) => boolean(name),\n timestamptz: (name) => timestamp(name, { withTimezone: true }),\n date: (name) => date(name),\n jsonb: (name) => jsonb(name),\n}\n\nexport function buildColumn(name: string, definition: ColumnDefinition): unknown {\n let column = FACTORIES[definition.type](name)\n if (definition.primary_key) column = column.primaryKey()\n if (definition.nullable === false && !definition.primary_key) column = column.notNull()\n if (definition.unique && !definition.primary_key) column = column.unique()\n if (definition.default !== undefined) {\n const value = definition.default\n // Only the schema's exact function allowlist becomes raw SQL — a text\n // literal that happens to end in parentheses is data, never code.\n column = column.default(\n typeof value === 'string' && isFunctionDefault(value, definition.type) ? sql.raw(value) : value,\n )\n }\n return column\n}\n","import { foreignKey, index, pgSchema, uniqueIndex, type PgTableWithColumns } from 'drizzle-orm/pg-core'\nimport { ormSchemaName } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { isQualifiedReference } from '../schema/identifiers.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport type { TableFile } from '../schema/table.js'\nimport { foreignKeyName, indexName } from '../schema/table.js'\nimport { buildColumn } from './columns.js'\nimport { columnTables } from './security.js'\n\nexport interface DrizzleEntities {\n /** The in-memory schema bag drizzle-kit snapshots (`generateDrizzleJson(imports)`). */\n readonly imports: Record<string, unknown>\n /** Tables by definition name — the typed handles query execution uses. */\n readonly tables: Record<string, PgTableWithColumns<never>>\n readonly schemaName: string\n}\n\n/** Table names share the imports bag with the schema entity — keep the schema key un-collidable ('$' can't appear in an identifier). */\nconst SCHEMA_IMPORT_KEY = '$schema'\n\n/**\n * Definitions → runtime Drizzle entities. Tables build in dependency order so\n * enforced links can reference their target's built column; policies attach in\n * the table's extras with predicates compiled from the parsed AST — raw policy\n * text never reaches SQL. Tables without policies stay RLS-enabled: default deny.\n */\nexport function buildDrizzleEntities(definition: NamespaceDefinition): DrizzleEntities {\n const schemaName = ormSchemaName(definition.namespace)\n const schema = pgSchema(schemaName)\n const imports: Record<string, unknown> = { [SCHEMA_IMPORT_KEY]: schema }\n const tables: Record<string, PgTableWithColumns<never>> = {}\n const built = new Map<string, Record<string, unknown>>()\n\n for (const table of sortByEnforcedLinks(columnTables(definition))) {\n const drizzleTable = buildTable(schema, table, built)\n built.set(table.table, drizzleTable as Record<string, unknown>)\n imports[table.table] = drizzleTable\n // enableRLS() returns Omit<..., 'enableRLS'>, which no longer overlaps\n // the columns generic — the double cast is the drizzle-typed escape hatch.\n tables[table.table] = drizzleTable as unknown as PgTableWithColumns<never>\n }\n return { imports, tables, schemaName }\n}\n\nfunction buildTable(\n schema: ReturnType<typeof pgSchema>,\n table: TableFile,\n built: ReadonlyMap<string, Record<string, unknown>>,\n) {\n const columns = Object.fromEntries(\n Object.entries(table.columns ?? {}).map(([name, column]) => [name, buildColumn(name, column)]),\n )\n\n const drizzleTable = schema.table(table.table, columns as never, (self: Record<string, unknown>) => [\n ...buildIndexes(table, self),\n ...buildForeignKeys(table, self, built),\n ])\n // Every table is RLS-enabled; the policies themselves are emitted by the\n // security pass (never through the kit diff — see security.ts).\n return drizzleTable.enableRLS()\n}\n\nfunction buildIndexes(table: TableFile, self: Record<string, unknown>) {\n return (table.indexes ?? []).map((definition) => {\n const name = indexName(table.table, definition)\n const factory = definition.unique ? uniqueIndex(name) : index(name)\n const columns = definition.columns.map((column) => self[column])\n return factory.on(...(columns as [never, ...never[]]))\n })\n}\n\nfunction buildForeignKeys(\n table: TableFile,\n self: Record<string, unknown>,\n built: ReadonlyMap<string, Record<string, unknown>>,\n) {\n return Object.entries(table.links ?? {})\n .filter(([, link]) => link.enforce)\n .map(([name, link]) => {\n // A self-referential link (parent_id hierarchy) resolves against the\n // table's own columns — it is never in `built` while being built.\n const target = link.to === table.table ? self : built.get(link.to)\n const targetColumn = target && findPrimaryKeyColumn(target)\n if (!target || !targetColumn) {\n throw new OrmDefinitionError(`enforced link '${name}' on '${table.table}' has no built target '${link.to}'`)\n }\n return foreignKey({\n name: foreignKeyName(table.table, name),\n columns: [self[link.on]] as [never],\n foreignColumns: [targetColumn] as [never],\n })\n })\n}\n\nfunction findPrimaryKeyColumn(target: Record<string, unknown>): unknown {\n const columns = Object.values(target).filter(\n (value) => value !== null && typeof value === 'object' && 'primary' in (value as object),\n )\n return columns.find((column) => (column as { primary: boolean }).primary)\n}\n\n/** Targets of enforced links build first; cycles are a definition error. */\nfunction sortByEnforcedLinks(tables: readonly TableFile[]): TableFile[] {\n const remaining = new Map(tables.map((table) => [table.table, table]))\n const sorted: TableFile[] = []\n const placed = new Set<string>()\n\n while (remaining.size > 0) {\n const ready = [...remaining.values()].filter((table) =>\n enforcedTargets(table).every((target) => placed.has(target) || !remaining.has(target)),\n )\n if (ready.length === 0) {\n throw new OrmDefinitionError(`enforced links form a cycle among: ${[...remaining.keys()].join(', ')}`)\n }\n for (const table of ready) {\n sorted.push(table)\n placed.add(table.table)\n remaining.delete(table.table)\n }\n }\n return sorted\n}\n\nconst enforcedTargets = (table: TableFile): string[] =>\n Object.values(table.links ?? {})\n // A self-target is not an ordering dependency — the FK builds inline.\n .filter((link) => link.enforce && !isQualifiedReference(link.to) && link.to !== table.table)\n .map((link) => link.to)\n","import { generateDrizzleJson, generateMigration, upPgSnapshot } from 'drizzle-kit/api'\nimport { ormSchemaName } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { quoteIdentifier } from '../compiler/sql.js'\nimport { castParts } from '../schema/columns.js'\nimport { sqlTypeName } from './types.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport { buildDrizzleEntities } from './tables.js'\nimport { columnTables } from './security.js'\n\n/** drizzle-kit's serialized schema — the diff/replay artifact the registry stores. */\nexport type NamespaceSnapshot = ReturnType<typeof generateDrizzleJson>\n\ninterface SnapshotColumn {\n name: string\n type: string\n [key: string]: unknown\n}\n\ninterface SnapshotTable {\n name: string\n schema: string\n columns: Record<string, SnapshotColumn>\n [key: string]: unknown\n}\n\nexport function generateSnapshot(definition: NamespaceDefinition, previousId?: string): NamespaceSnapshot {\n const { imports, schemaName } = buildDrizzleEntities(definition)\n return generateDrizzleJson(imports, previousId, [schemaName])\n}\n\nexport const emptySnapshot = (namespace: string): NamespaceSnapshot =>\n generateDrizzleJson({}, undefined, [ormSchemaName(namespace)])\n\nconst CURRENT_SNAPSHOT_VERSION = (generateDrizzleJson({}) as { version: string }).version\n\n/**\n * Persisted snapshots (registry version rows, committed migrations/meta)\n * outlive drizzle-kit upgrades. `upPgSnapshot` migrates older snapshot\n * formats to the kit's current one; a snapshot that still isn't current\n * after upgrading came from a NEWER kit than this one — fail loudly rather\n * than let the diff silently misread it.\n */\nexport function normalizeSnapshot(snapshot: NamespaceSnapshot): NamespaceSnapshot {\n const upgraded = upPgSnapshot(snapshot as Record<string, unknown>) as NamespaceSnapshot\n const version = (upgraded as { version?: unknown }).version\n if (version !== CURRENT_SNAPSHOT_VERSION) {\n throw new OrmDefinitionError(\n `snapshot format '${String(version)}' is not supported by this drizzle-kit (expected '${CURRENT_SNAPSHOT_VERSION}') — upgrade @sequenceholdings/orm`,\n )\n }\n return upgraded\n}\n\nexport function diffStatements(previous: NamespaceSnapshot, current: NamespaceSnapshot): Promise<string[]> {\n assertUnambiguousDiff(previous, current)\n return generateMigration(previous as never, current as never)\n}\n\n/**\n * drizzle-kit resolves a simultaneous add + drop by PROMPTING (\"did you\n * rename X to Y?\") — interactive hanji UI that hangs a terminal and throws\n * an opaque TTY error everywhere else. Renames are declared in the YAML\n * (`renamed_from`, applied as hints before the diff), so any add+drop pair\n * reaching the kit is either an undeclared rename or two changes bundled\n * into one — refuse both with an actionable message.\n */\nfunction assertUnambiguousDiff(previous: NamespaceSnapshot, current: NamespaceSnapshot): void {\n const previousTables = tablesOf(previous)\n const currentTables = tablesOf(current)\n\n const removedTables = [...previousTables.keys()].filter((name) => !currentTables.has(name))\n const addedTables = [...currentTables.keys()].filter((name) => !previousTables.has(name))\n if (removedTables.length > 0 && addedTables.length > 0) {\n throw new OrmDefinitionError(\n `ambiguous diff: table(s) added (${addedTables.join(', ')}) and removed (${removedTables.join(', ')}) in the same change — ship the add and the drop as separate changes`,\n )\n }\n\n for (const [name, previousColumns] of previousTables) {\n const currentColumns = currentTables.get(name)\n if (!currentColumns) continue\n const removed = [...previousColumns].filter((column) => !currentColumns.has(column))\n const added = [...currentColumns].filter((column) => !previousColumns.has(column))\n if (removed.length > 0 && added.length > 0) {\n throw new OrmDefinitionError(\n `ambiguous diff on '${name}': column(s) added (${added.join(', ')}) and removed (${removed.join(', ')}) in the same change — declare \\`renamed_from\\` for a rename, or ship the add and the drop as separate changes`,\n )\n }\n }\n}\n\nfunction tablesOf(snapshot: NamespaceSnapshot): Map<string, Set<string>> {\n const tables = (snapshot as { tables?: Record<string, SnapshotTable> }).tables ?? {}\n return new Map(\n Object.values(tables).map((table) => [`${table.schema}.${table.name}`, new Set(Object.keys(table.columns))]),\n )\n}\n\nexport interface MigrationHints {\n /** ALTER RENAME / ALTER TYPE USING statements to run before the kit diff. */\n readonly statements: string[]\n /** Previous snapshot rewritten so the kit diff never sees the rename/cast. */\n readonly adjusted: NamespaceSnapshot\n}\n\n/**\n * Renames and casts are declared in the YAML, never inferred: we emit the\n * statement ourselves and rewrite the previous snapshot to match, so\n * drizzle-kit never faces a create+drop ambiguity (its API resolves those\n * interactively — fatal in a service).\n */\nexport function applyMigrationHints(previous: NamespaceSnapshot, definition: NamespaceDefinition): MigrationHints {\n const adjusted = structuredClone(previous) as NamespaceSnapshot\n const statements: string[] = []\n const schemaName = ormSchemaName(definition.namespace)\n const qualified = (table: string) => `${quoteIdentifier(schemaName)}.${quoteIdentifier(table)}`\n\n for (const table of columnTables(definition)) {\n const snapshotTable = findTable(adjusted, schemaName, table.table)\n if (!snapshotTable) continue\n\n for (const [name, column] of Object.entries(table.columns ?? {})) {\n if (column.renamed_from) {\n const previousColumn = snapshotTable.columns[column.renamed_from]\n if (previousColumn && snapshotTable.columns[name]) {\n // Both live: silently ignoring the hint would hand drizzle-kit the\n // source column as a plain drop — data loss the declaration was\n // meant to prevent.\n throw new OrmDefinitionError(\n `'${table.table}.${name}' declares renamed_from '${column.renamed_from}', but both columns exist in the previous schema — a rename cannot overwrite a live column`,\n )\n }\n if (previousColumn) {\n statements.push(\n `ALTER TABLE ${qualified(table.table)} RENAME COLUMN ${quoteIdentifier(column.renamed_from)} TO ${quoteIdentifier(name)}`,\n )\n delete snapshotTable.columns[column.renamed_from]\n snapshotTable.columns[name] = { ...previousColumn, name }\n } else if (!snapshotTable.columns[name]) {\n // Neither the declared source nor the destination exists in the\n // previous schema: a typo'd or stale renamed_from. Falling through\n // would hand drizzle-kit a drop/add diff — the exact ambiguity the\n // declaration exists to prevent — so fail with the declaration.\n throw new OrmDefinitionError(\n `'${table.table}.${name}' declares renamed_from '${column.renamed_from}', but the previous schema has neither column — check the declared source name`,\n )\n }\n }\n\n const cast = column.cast ? castParts(column.cast) : null\n if (cast) {\n const current = snapshotTable.columns[name]\n const targetType = sqlTypeName(column.type)\n if (current && current.type !== targetType) {\n statements.push(\n `ALTER TABLE ${qualified(table.table)} ALTER COLUMN ${quoteIdentifier(name)} TYPE ${targetType} USING ${quoteIdentifier(name)}::${targetType}`,\n )\n current.type = targetType\n }\n }\n }\n }\n return { statements, adjusted }\n}\n\nfunction findTable(snapshot: NamespaceSnapshot, schema: string, table: string): SnapshotTable | undefined {\n const tables = (snapshot as { tables?: Record<string, SnapshotTable> }).tables ?? {}\n return Object.values(tables).find((entry) => entry.schema === schema && entry.name === table)\n}\n\n/** Names of the tables a snapshot holds for one schema — the tables that exist before this plan runs. */\nexport function snapshotTableNames(snapshot: NamespaceSnapshot, schema: string): string[] {\n const tables = (snapshot as { tables?: Record<string, SnapshotTable> }).tables ?? {}\n return Object.values(tables)\n .filter((entry) => entry.schema === schema)\n .map((entry) => entry.name)\n}\n","import { pushSchema } from 'drizzle-kit/api'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport { buildDrizzleEntities } from './tables.js'\n\n/**\n * Statements the security pass owns — policies, RLS toggles, grants, roles,\n * and the synced views — deliberately live outside the kit's snapshots, so\n * the kit's introspection always \"wants\" to remove them. They are\n * deterministic drop+recreate on every apply (converged by construction)\n * and are excluded from the convergence verdict.\n *\n * Matched by the statement's LEADING command (or the multi-word `ROW LEVEL\n * SECURITY` phrase), never by a keyword appearing anywhere — otherwise a\n * legitimate kit statement for a user column named `role`/`grant`/`policy`\n * (`ALTER TABLE ... ADD COLUMN \"role\" ...`) would be misread as owned and\n * silently dropped from the verdict, letting a non-converged schema pass.\n */\nconst OWNED_STATEMENT = new RegExp(\n [\n String.raw`^\\s*(CREATE|DROP)\\s+POLICY\\b`,\n String.raw`^\\s*(GRANT|REVOKE)\\b`,\n String.raw`^\\s*(CREATE|DROP|ALTER)\\s+ROLE\\b`,\n String.raw`^\\s*(CREATE|DROP)\\s+(OR\\s+REPLACE\\s+)?VIEW\\b`,\n // Only ever appears in an RLS toggle (ALTER TABLE … [ENABLE|FORCE] ROW LEVEL\n // SECURITY) — a three-word phrase, never an identifier.\n String.raw`\\bROW LEVEL SECURITY\\b`,\n ].join('|'),\n 'i',\n)\n\n/**\n * Whether a kit-emitted statement is one the security pass owns (and so is\n * excluded from the convergence verdict). Exported for direct testing of the\n * classification, which is load-bearing: a false positive silently drops a real\n * pending statement and lets a non-converged schema pass.\n */\nexport function isOwnedStatement(statement: string): boolean {\n return OWNED_STATEMENT.test(statement)\n}\n\n/**\n * The kit-owned statements a live database would still need to match the\n * definition — drizzle-kit's `pushSchema` introspection diffed against the\n * built entities. Empty means the schema converged: what the rehearsal (or\n * any verification) uses as the introspect-level proof that executing the\n * plan actually produced the desired state, not merely that it didn't error.\n */\nexport async function pendingKitStatements({\n definition,\n db,\n}: {\n definition: NamespaceDefinition\n /** A drizzle PgDatabase over the target — typed loose because pushSchema's own parameter is `PgDatabase<any>`. */\n db: unknown\n}): Promise<string[]> {\n const { imports, schemaName } = buildDrizzleEntities(definition)\n const { statementsToExecute } = await withExitGuard(() =>\n pushSchema(imports, shimExecute(db) as never, [schemaName]),\n )\n return statementsToExecute.filter((statement) => !OWNED_STATEMENT.test(statement))\n}\n\ninterface ExecuteResult {\n rows?: unknown\n}\n\n/**\n * pushSchema reads `.rows` off `drizzleInstance.execute(...)` — the\n * node-postgres shape. The postgres-js driver returns the row array itself\n * (drizzle-orm#5293), so introspection dies on `undefined`. pushSchema uses\n * nothing but `execute`, so a two-line adapter covers both drivers.\n */\nfunction shimExecute(db: unknown): { execute: (query: unknown) => Promise<ExecuteResult> } {\n const execute = (db as { execute: (query: unknown) => Promise<unknown> }).execute.bind(db)\n return {\n execute: async (query) => {\n const result = await execute(query)\n if (result && typeof result === 'object' && 'rows' in result) return result as ExecuteResult\n return { rows: result }\n },\n }\n}\n\n/**\n * drizzle-kit 0.x handles some internal errors by printing and calling\n * `process.exit(1)` — inside a long-lived worker that kills the process\n * mid-run. Turn any exit attempt during the introspection into a normal\n * throw the caller's error handling can record.\n *\n * `process.exit` is process-global, and the inline rehearsal path runs in the\n * shared Atlas server process, so two concurrent guards could interleave their\n * patch/restore and leave the real `exit` swapped out (or restore it while\n * another introspection is still running). Serialize every guarded section on a\n * module-level promise chain so patch → run → restore is atomic.\n */\nlet exitGuardChain: Promise<unknown> = Promise.resolve()\n\nfunction withExitGuard<T>(run: () => Promise<T>): Promise<T> {\n const next = exitGuardChain.then(() => guardedRun(run))\n // Keep the chain alive past a rejection so one failed introspection doesn't\n // wedge every later one.\n exitGuardChain = next.then(\n () => undefined,\n () => undefined,\n )\n return next\n}\n\nasync function guardedRun<T>(run: () => Promise<T>): Promise<T> {\n const originalExit = process.exit\n process.exit = ((code?: number) => {\n throw new Error(`drizzle-kit attempted process.exit(${code ?? 0}) during pushSchema introspection`)\n }) as never\n try {\n return await run()\n } finally {\n process.exit = originalExit\n }\n}\n","import { ormSchemaName } from '../constants.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport { actionFunctionStatements, actionPrepareChecks } from './actions.js'\nimport { policyDropStatements, securityStatements } from './security.js'\nimport {\n applyMigrationHints,\n diffStatements,\n emptySnapshot,\n generateSnapshot,\n normalizeSnapshot,\n snapshotTableNames,\n type NamespaceSnapshot,\n} from './snapshot.js'\n\nexport const STATEMENT_KINDS = ['hint', 'ddl', 'security', 'function'] as const\nexport type StatementKind = (typeof STATEMENT_KINDS)[number]\n\nexport interface CompiledStatement {\n readonly kind: StatementKind\n readonly sql: string\n}\n\nexport interface PlannedMigration {\n readonly namespace: string\n readonly schema: string\n readonly statements: readonly CompiledStatement[]\n /** Snapshot of the desired state — persisted by the registry, previous input to the next plan. */\n readonly snapshot: NamespaceSnapshot\n}\n\n/**\n * Desired definition + the previously applied snapshot → ordered statements.\n * The owned policies on pre-existing tables drop first (Postgres refuses to\n * alter or drop a column a live policy depends on), hints (declared\n * renames/casts) rewrite the previous snapshot, drizzle-kit diffs the\n * remainder, and the owned security statements (FORCE RLS, recreated\n * policies, consumer grants) close every migration.\n */\nexport async function planMigration({\n definition,\n previousSnapshot,\n}: {\n definition: NamespaceDefinition\n previousSnapshot?: NamespaceSnapshot\n}): Promise<PlannedMigration> {\n const schema = ormSchemaName(definition.namespace)\n // Stored snapshots may predate this kit — normalize (and fail loudly on\n // a newer-than-us format) before anything diffs against them.\n const previous = previousSnapshot ? normalizeSnapshot(previousSnapshot) : emptySnapshot(definition.namespace)\n const hints = applyMigrationHints(previous, definition)\n const snapshot = generateSnapshot(definition, previousId(previous))\n const ddl = await diffStatements(hints.adjusted, snapshot)\n // Only tables the previous snapshot holds exist in the database — DROP\n // POLICY IF EXISTS still errors when the table itself is missing.\n const policyDrops = policyDropStatements(schema, snapshotTableNames(previous, schema))\n\n const statements: CompiledStatement[] = [\n ...policyDrops.map((sql) => ({ kind: 'security' as const, sql })),\n ...hints.statements.map((sql) => ({ kind: 'hint' as const, sql })),\n ...ddl.map((sql) => ({ kind: 'ddl' as const, sql: sql.replace(/;\\s*$/, '') })),\n ...securityStatements(definition).map((sql) => ({ kind: 'security' as const, sql })),\n // PREPARE each action's executes first (plpgsql bodies don't check columns\n // at CREATE), then create the functions. Both reference the tables the DDL\n // above creates, so they close the plan.\n ...actionPrepareChecks(definition).map((sql) => ({ kind: 'function' as const, sql })),\n ...actionFunctionStatements(definition).map((sql) => ({ kind: 'function' as const, sql })),\n ]\n return { namespace: definition.namespace, schema, statements, snapshot }\n}\n\n/** Full-create plan (empty previous snapshot) — what `plan` prints and first apply runs. */\nexport const compileNamespace = (definition: NamespaceDefinition): Promise<PlannedMigration> =>\n planMigration({ definition })\n\nconst previousId = (snapshot: NamespaceSnapshot): string | undefined =>\n (snapshot as { id?: string }).id\n\nexport { isOwnedStatement, pendingKitStatements } from './converge.js'\nexport { buildDrizzleEntities } from './tables.js'\nexport type { DrizzleEntities } from './tables.js'\nexport {\n ACTION_REQUIRES_DENIED_SQLSTATE,\n ACTION_VALIDATES_FAILED_SQLSTATE,\n actionFunctionName,\n actionFunctionStatements,\n actionPrepareChecks,\n} from './actions.js'\nexport { securityStatements } from './security.js'\nexport { applyMigrationHints, diffStatements, emptySnapshot, generateSnapshot, normalizeSnapshot } from './snapshot.js'\nexport type { NamespaceSnapshot } from './snapshot.js'\nexport { sqlTypeName } from './types.js'\n","import { sql } from 'drizzle-orm'\nimport {\n bigint,\n boolean,\n date,\n doublePrecision,\n foreignKey,\n index,\n integer,\n jsonb,\n numeric,\n pgSchema,\n primaryKey,\n text,\n timestamp,\n uniqueIndex,\n uuid,\n type PgTableWithColumns,\n} from 'drizzle-orm/pg-core'\nimport { generateDrizzleJson } from 'drizzle-kit/api'\nimport type {\n CanonicalColumn,\n CanonicalDefinition,\n CanonicalTable,\n ColumnType,\n} from '../canonical/v2.js'\nimport { quoteIdentifier } from '../compiler/sql.js'\nimport { ormSchemaName } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { castParts, isFunctionDefault } from '../schema/columns.js'\nimport { foreignKeyName, indexName } from '../schema/table.js'\nimport type { CompiledStatement, PlannedMigration } from './index.js'\nimport { diffStatements, emptySnapshot, normalizeSnapshot, type MigrationHints, type NamespaceSnapshot } from './snapshot.js'\nimport type { DrizzleEntities } from './tables.js'\nimport { sqlTypeName } from './types.js'\n\n/**\n * Canonical v2 → runtime Drizzle entities + migration plans. This is the v2\n * twin of engine/{tables,columns}.ts + the planMigration chain, consuming\n * `CanonicalDefinition` (the frozen canonical/v2.ts contract) instead of the\n * v1 YAML `NamespaceDefinition`. The v1 modules stay untouched — v1 namespaces\n * keep planning through them until they rebase (see migrations/v2.ts).\n *\n * Snapshot-compatibility invariants (the rebase no-op depends on them):\n * - the 10 column types build through the exact same drizzle factories as\n * engine/columns.ts;\n * - tables stay `.enableRLS()` so a converted namespace's snapshot is\n * byte-equivalent to its committed v1 tip (v2 enforces policies in the\n * compiled operations, not in Postgres, but flipping RLS off would mint a\n * spurious `DISABLE ROW LEVEL SECURITY` diff on every rebase);\n * - index / FK names derive through the same schema/table.ts formulas.\n *\n * v2 additions over the v1 engine: pg enums (`defineEnum`) scoped to the\n * namespace schema, composite primary keys, table-level `renamedFrom`, and a\n * plan with NO security/function statements — policies ship inside compiled\n * operations and actions execute on the data plane, so DDL is all that's left.\n */\n\ntype ColumnFactory = (name: string) => ColumnBuilder\n\ninterface ColumnBuilder {\n primaryKey(): ColumnBuilder\n notNull(): ColumnBuilder\n unique(): ColumnBuilder\n default(value: unknown): ColumnBuilder\n}\n\n/** Mirrors engine/columns.ts FACTORIES exactly — one factory per v1 type. */\nconst FACTORIES: Readonly<Record<ColumnType, ColumnFactory>> = {\n uuid: (name) => uuid(name),\n text: (name) => text(name),\n integer: (name) => integer(name),\n // Mode 'bigint' keeps int8 lossless — mode 'number' silently rounds past\n // 2^53. The read executor serializes BigInt to string for JSON.\n bigint: (name) => bigint(name, { mode: 'bigint' }),\n numeric: (name) => numeric(name),\n double: (name) => doublePrecision(name),\n boolean: (name) => boolean(name),\n timestamptz: (name) => timestamp(name, { withTimezone: true }),\n date: (name) => date(name),\n jsonb: (name) => jsonb(name),\n}\n\n/** Enum names share the imports bag with tables — '$' can't appear in an identifier, so the key never collides. */\nconst SCHEMA_IMPORT_KEY = '$schema'\nconst enumImportKey = (name: string): string => `$enum_${name}`\n\ntype BuiltEnum = ColumnFactory\n\n/** Tables that own columns (synced `source:` tables reflect their gold source and never build DDL). */\nconst columnTablesV2 = (definition: CanonicalDefinition): CanonicalTable[] =>\n definition.tables.filter((table) => !table.source)\n\n/**\n * Canonical v2 → the in-memory schema bag drizzle-kit snapshots plus typed\n * table handles — the same `DrizzleEntities` shape engine/snapshot.ts consumes.\n */\nexport function buildDrizzleEntitiesV2(definition: CanonicalDefinition): DrizzleEntities {\n const schemaName = ormSchemaName(definition.namespace)\n const schema = pgSchema(schemaName)\n const imports: Record<string, unknown> = { [SCHEMA_IMPORT_KEY]: schema }\n const tables: Record<string, PgTableWithColumns<never>> = {}\n const built = new Map<string, Record<string, unknown>>()\n\n const enums = new Map<string, BuiltEnum>()\n for (const enumDefinition of definition.enums) {\n // canonicalEnumSchema guarantees ≥1 value; the tuple cast restates that.\n const values = enumDefinition.values as [string, ...string[]]\n const builtEnum = schema.enum(enumDefinition.name, values)\n enums.set(enumDefinition.name, builtEnum as unknown as BuiltEnum)\n imports[enumImportKey(enumDefinition.name)] = builtEnum\n }\n\n const byName = new Map(definition.tables.map((table) => [table.table, table]))\n for (const table of sortByEnforcedLinks(columnTablesV2(definition))) {\n const drizzleTable = buildTable(schema, table, built, enums, byName)\n built.set(table.table, drizzleTable as Record<string, unknown>)\n imports[table.table] = drizzleTable\n // enableRLS() returns Omit<..., 'enableRLS'>, which no longer overlaps\n // the columns generic — the double cast is the drizzle-typed escape hatch.\n tables[table.table] = drizzleTable as unknown as PgTableWithColumns<never>\n }\n return { imports, tables, schemaName }\n}\n\n/** drizzle-kit snapshot for a canonical definition — the v2 twin of engine/snapshot.ts generateSnapshot. */\nexport function generateSnapshotV2(definition: CanonicalDefinition, previousId?: string): NamespaceSnapshot {\n const { imports, schemaName } = buildDrizzleEntitiesV2(definition)\n return generateDrizzleJson(imports, previousId, [schemaName])\n}\n\nfunction buildTable(\n schema: ReturnType<typeof pgSchema>,\n table: CanonicalTable,\n built: ReadonlyMap<string, Record<string, unknown>>,\n enums: ReadonlyMap<string, BuiltEnum>,\n byName: ReadonlyMap<string, CanonicalTable>,\n) {\n const primaryKeyColumns = table.primaryKey ?? []\n if (primaryKeyColumns.length === 0) {\n throw new OrmDefinitionError(`table '${table.table}' declares no primaryKey`)\n }\n const columnNames = new Set(table.columns.map((column) => column.columnName))\n for (const name of primaryKeyColumns) {\n if (!columnNames.has(name)) {\n throw new OrmDefinitionError(`primaryKey of '${table.table}' references unknown column '${name}'`)\n }\n }\n const singlePrimaryKey = primaryKeyColumns.length === 1 ? primaryKeyColumns[0] : undefined\n const compositeMembers = new Set(singlePrimaryKey === undefined ? primaryKeyColumns : [])\n\n const columns = Object.fromEntries(\n table.columns.map((column) => [\n column.columnName,\n buildColumnV2({ table: table.table, column, singlePrimaryKey, compositeMembers, enums }),\n ]),\n )\n\n const drizzleTable = schema.table(table.table, columns as never, (self: Record<string, unknown>) => [\n ...buildCompositePrimaryKey(table, primaryKeyColumns, self),\n ...buildIndexes(table, self),\n ...buildForeignKeys(table, self, built, byName),\n ])\n // Tables stay RLS-enabled for snapshot parity with committed v1 tips (see\n // module doc). v2 policy enforcement lives in the compiled operations.\n return drizzleTable.enableRLS()\n}\n\nfunction resolveColumnFactory(\n table: string,\n column: CanonicalColumn,\n enums: ReadonlyMap<string, BuiltEnum>,\n): ColumnFactory {\n if (typeof column.type === 'string') return FACTORIES[column.type]\n const enumFactory = enums.get(column.type.enum)\n if (!enumFactory) {\n throw new OrmDefinitionError(`column '${table}.${column.columnName}' references undeclared enum '${column.type.enum}'`)\n }\n return enumFactory\n}\n\nfunction buildColumnV2({\n table,\n column,\n singlePrimaryKey,\n compositeMembers,\n enums,\n}: {\n table: string\n column: CanonicalColumn\n singlePrimaryKey: string | undefined\n compositeMembers: ReadonlySet<string>\n enums: ReadonlyMap<string, BuiltEnum>\n}): unknown {\n const factory = resolveColumnFactory(table, column, enums)\n\n let builder = factory(column.columnName)\n const isSinglePrimaryKey = column.columnName === singlePrimaryKey\n if (isSinglePrimaryKey) builder = builder.primaryKey()\n // Mirrors engine/columns.ts: a single-column PK already implies NOT NULL.\n // Composite members are forced NOT NULL — Postgres does it implicitly, so\n // the snapshot must say so too or the next diff would try to relax it.\n if ((column.nullable === false || compositeMembers.has(column.columnName)) && !isSinglePrimaryKey) {\n builder = builder.notNull()\n }\n if (column.unique && !isSinglePrimaryKey) builder = builder.unique()\n\n if (column.defaultFn !== undefined && column.default !== undefined) {\n throw new OrmDefinitionError(`column '${table}.${column.columnName}' declares both default and defaultFn`)\n }\n if (column.defaultFn !== undefined) {\n // The canonical schema already restricts defaultFn to the two allowlisted\n // functions; this re-checks the function/type pairing exactly as v1 did\n // (gen_random_uuid() → uuid, now() → timestamptz/date). Enum columns take\n // literal defaults only.\n if (typeof column.type !== 'string' || !isFunctionDefault(column.defaultFn, column.type)) {\n throw new OrmDefinitionError(\n `column '${table}.${column.columnName}' declares defaultFn '${column.defaultFn}' which is invalid for its type`,\n )\n }\n builder = builder.default(sql.raw(column.defaultFn))\n } else if (column.default !== undefined && column.default !== null) {\n // Literal defaults only — a text default that happens to end in `()` is\n // data, never code (the defaultFn allowlist is the ONLY raw-SQL path).\n // `default: null` is skipped: DEFAULT NULL is Postgres's own default.\n builder = builder.default(column.default)\n }\n return builder\n}\n\nfunction buildCompositePrimaryKey(table: CanonicalTable, primaryKeyColumns: readonly string[], self: Record<string, unknown>) {\n if (primaryKeyColumns.length < 2) return []\n // `<table>_pkey` matches what Postgres names an unlabeled PRIMARY KEY, so\n // an introspected database converges with the snapshot.\n return [\n primaryKey({\n name: `${table.table}_pkey`,\n columns: primaryKeyColumns.map((column) => self[column]) as [never, ...never[]],\n }),\n ]\n}\n\nfunction buildIndexes(table: CanonicalTable, self: Record<string, unknown>) {\n return table.indexes.map((definition) => {\n for (const column of definition.columns) {\n if (!(column in self)) {\n throw new OrmDefinitionError(`index on '${table.table}' references unknown column '${column}'`)\n }\n }\n const name = indexName(table.table, definition)\n const factory = definition.unique ? uniqueIndex(name) : index(name)\n const columns = definition.columns.map((column) => self[column])\n return factory.on(...(columns as [never, ...never[]]))\n })\n}\n\nfunction buildForeignKeys(\n table: CanonicalTable,\n self: Record<string, unknown>,\n built: ReadonlyMap<string, Record<string, unknown>>,\n byName: ReadonlyMap<string, CanonicalTable>,\n) {\n return table.links\n .filter((link) => link.enforce)\n .map((link) => {\n if (link.kind !== 'toOne' || !link.target) {\n throw new OrmDefinitionError(\n `enforced link '${link.name}' on '${table.table}' must be a toOne link with a namespace-local target`,\n )\n }\n // A self-referential link (parent_id hierarchy) resolves against the\n // table's own columns — it is never in `built` while being built.\n const targetTable = byName.get(link.target)\n const target = link.target === table.table ? self : built.get(link.target)\n if (!targetTable || !target) {\n throw new OrmDefinitionError(`enforced link '${link.name}' on '${table.table}' has no built target '${link.target}'`)\n }\n const referencedColumn = link.references ?? singlePrimaryKeyOf(targetTable)\n if (!referencedColumn) {\n throw new OrmDefinitionError(\n `enforced link '${link.name}' on '${table.table}' targets '${link.target}' whose primary key is composite — declare 'references'`,\n )\n }\n const targetColumn = target[referencedColumn]\n const sourceColumn = self[link.on]\n if (!targetColumn || !sourceColumn) {\n throw new OrmDefinitionError(\n `enforced link '${link.name}' on '${table.table}' references unknown column '${targetColumn ? link.on : referencedColumn}'`,\n )\n }\n return foreignKey({\n name: foreignKeyName(table.table, link.name),\n columns: [sourceColumn] as [never],\n foreignColumns: [targetColumn] as [never],\n })\n })\n}\n\nconst singlePrimaryKeyOf = (table: CanonicalTable): string | undefined =>\n table.primaryKey?.length === 1 ? table.primaryKey[0] : undefined\n\n/** Targets of enforced links build first; cycles are a definition error. Mirrors engine/tables.ts. */\nfunction sortByEnforcedLinks(tables: readonly CanonicalTable[]): CanonicalTable[] {\n const remaining = new Map(tables.map((table) => [table.table, table]))\n const sorted: CanonicalTable[] = []\n const placed = new Set<string>()\n\n while (remaining.size > 0) {\n const ready = [...remaining.values()].filter((table) =>\n enforcedTargets(table).every((target) => placed.has(target) || !remaining.has(target)),\n )\n if (ready.length === 0) {\n throw new OrmDefinitionError(`enforced links form a cycle among: ${[...remaining.keys()].join(', ')}`)\n }\n for (const table of ready) {\n sorted.push(table)\n placed.add(table.table)\n remaining.delete(table.table)\n }\n }\n return sorted\n}\n\nconst enforcedTargets = (table: CanonicalTable): string[] =>\n table.links.flatMap((link) =>\n // A self-target is not an ordering dependency — the FK builds inline.\n link.enforce && link.target !== undefined && link.target !== table.table ? [link.target] : [],\n )\n\n// ---------------------------------------------------------------------------\n// Migration hints (declared renames/casts) — v2 twin of snapshot.ts\n// ---------------------------------------------------------------------------\n\ninterface SnapshotColumn {\n name: string\n type: string\n [key: string]: unknown\n}\n\ninterface SnapshotTable {\n name: string\n schema: string\n columns: Record<string, SnapshotColumn>\n [key: string]: unknown\n}\n\n/**\n * Renames and casts are declared in the canonical definition, never inferred:\n * we emit the statement ourselves and rewrite the previous snapshot to match,\n * so drizzle-kit never faces a create+drop ambiguity (its API resolves those\n * interactively — fatal in a service). Semantics mirror engine/snapshot.ts\n * applyMigrationHints exactly, plus the v2-only table-level `renamedFrom`\n * (applied FIRST, so column hints find the table under its new name).\n *\n * This is a sibling of the v1 function rather than a wrapper: the v1 one is\n * keyed to `NamespaceDefinition`'s record-shaped columns and cannot express\n * table renames or enum-typed cast targets.\n */\nexport function applyMigrationHintsV2(previous: NamespaceSnapshot, definition: CanonicalDefinition): MigrationHints {\n const adjusted = structuredClone(previous) as NamespaceSnapshot\n const statements: string[] = []\n const schemaName = ormSchemaName(definition.namespace)\n const qualified = (table: string) => `${quoteIdentifier(schemaName)}.${quoteIdentifier(table)}`\n const enumsByName = new Map(definition.enums.map((entry) => [entry.name, entry]))\n\n for (const table of columnTablesV2(definition)) {\n if (table.renamedFrom) {\n applyTableRename({ adjusted, schemaName, table, renamedFrom: table.renamedFrom, statements, qualified })\n }\n\n const snapshotTable = findTable(adjusted, schemaName, table.table)\n if (!snapshotTable) continue\n\n for (const column of table.columns) {\n const name = column.columnName\n if (column.renamedFrom) {\n const previousColumn = snapshotTable.columns[column.renamedFrom]\n if (previousColumn && snapshotTable.columns[name]) {\n // Both live: silently ignoring the hint would hand drizzle-kit the\n // source column as a plain drop — data loss the declaration was\n // meant to prevent.\n throw new OrmDefinitionError(\n `'${table.table}.${name}' declares renamedFrom '${column.renamedFrom}', but both columns exist in the previous schema — a rename cannot overwrite a live column`,\n )\n }\n if (previousColumn) {\n statements.push(\n `ALTER TABLE ${qualified(table.table)} RENAME COLUMN ${quoteIdentifier(column.renamedFrom)} TO ${quoteIdentifier(name)}`,\n )\n delete snapshotTable.columns[column.renamedFrom]\n snapshotTable.columns[name] = { ...previousColumn, name }\n } else if (!snapshotTable.columns[name]) {\n // Neither the declared source nor the destination exists in the\n // previous schema: a typo'd or stale renamedFrom. Falling through\n // would hand drizzle-kit a drop/add diff — the exact ambiguity the\n // declaration exists to prevent — so fail with the declaration.\n throw new OrmDefinitionError(\n `'${table.table}.${name}' declares renamedFrom '${column.renamedFrom}', but the previous schema has neither column — check the declared source name`,\n )\n }\n }\n\n const cast = column.cast ? castParts(column.cast) : null\n if (cast) {\n const current = snapshotTable.columns[name]\n const { snapshotType, sqlType } = castTargetTypes(column, enumsByName, schemaName, table.table)\n if (current && current.type !== snapshotType) {\n statements.push(\n `ALTER TABLE ${qualified(table.table)} ALTER COLUMN ${quoteIdentifier(name)} TYPE ${sqlType} USING ${quoteIdentifier(name)}::${sqlType}`,\n )\n current.type = snapshotType\n }\n }\n }\n }\n return { statements, adjusted }\n}\n\n/**\n * The cast target as drizzle-kit snapshots it vs. as SQL must spell it: enum\n * columns snapshot with the bare enum name (typeSchema is separate), but the\n * ALTER must qualify the type — the plan runs with an empty search_path.\n */\nfunction castTargetTypes(\n column: CanonicalColumn,\n enums: ReadonlyMap<string, { name: string }>,\n schemaName: string,\n table: string,\n): { snapshotType: string; sqlType: string } {\n if (typeof column.type === 'string') {\n const name = sqlTypeName(column.type)\n return { snapshotType: name, sqlType: name }\n }\n const enumName = column.type.enum\n if (!enums.has(enumName)) {\n throw new OrmDefinitionError(`column '${table}.${column.columnName}' casts to undeclared enum '${enumName}'`)\n }\n return { snapshotType: enumName, sqlType: `${quoteIdentifier(schemaName)}.${quoteIdentifier(enumName)}` }\n}\n\nfunction applyTableRename({\n adjusted,\n schemaName,\n table,\n renamedFrom,\n statements,\n qualified,\n}: {\n adjusted: NamespaceSnapshot\n schemaName: string\n table: CanonicalTable\n renamedFrom: string\n statements: string[]\n qualified: (table: string) => string\n}): void {\n const tables = (adjusted as { tables?: Record<string, SnapshotTable> }).tables ?? {}\n const previousEntry = Object.entries(tables).find(\n ([, entry]) => entry.schema === schemaName && entry.name === renamedFrom,\n )\n const currentTable = findTable(adjusted, schemaName, table.table)\n if (previousEntry && currentTable) {\n throw new OrmDefinitionError(\n `'${table.table}' declares renamedFrom '${renamedFrom}', but both tables exist in the previous schema — a rename cannot overwrite a live table`,\n )\n }\n if (!previousEntry) {\n if (currentTable) return // hint already applied in an earlier migration\n throw new OrmDefinitionError(\n `'${table.table}' declares renamedFrom '${renamedFrom}', but the previous schema has neither table — check the declared source name`,\n )\n }\n statements.push(`ALTER TABLE ${qualified(renamedFrom)} RENAME TO ${quoteIdentifier(table.table)}`)\n const [previousKey, previousTable] = previousEntry\n delete tables[previousKey]\n tables[`${schemaName}.${table.table}`] = { ...previousTable, name: table.table }\n}\n\nfunction findTable(snapshot: NamespaceSnapshot, schema: string, table: string): SnapshotTable | undefined {\n const tables = (snapshot as { tables?: Record<string, SnapshotTable> }).tables ?? {}\n return Object.values(tables).find((entry) => entry.schema === schema && entry.name === table)\n}\n\n// ---------------------------------------------------------------------------\n// Plan\n// ---------------------------------------------------------------------------\n\n/**\n * Desired canonical definition + the previously applied snapshot → ordered\n * statements. The v2 twin of engine/index.ts planMigration, reusing its\n * exported internals (normalizeSnapshot/emptySnapshot/diffStatements — the\n * assertUnambiguousDiff backstop rides along inside diffStatements).\n *\n * Deliberately absent relative to v1: policy drops, securityStatements, and\n * action function statements. v2 enforces row policies inside compiled\n * operations (no PG RLS policies) and executes actions on the data plane\n * (no plpgsql functions), so a v2 plan is hints + kit DDL only.\n */\nexport async function planMigrationV2({\n canonical,\n previousSnapshot,\n}: {\n canonical: CanonicalDefinition\n previousSnapshot?: NamespaceSnapshot\n}): Promise<PlannedMigration> {\n const schema = ormSchemaName(canonical.namespace)\n // Stored snapshots may predate this kit — normalize (and fail loudly on\n // a newer-than-us format) before anything diffs against them.\n const previous = previousSnapshot ? normalizeSnapshot(previousSnapshot) : emptySnapshot(canonical.namespace)\n const hints = applyMigrationHintsV2(previous, canonical)\n const snapshot = generateSnapshotV2(canonical, previousId(previous))\n const ddl = await diffStatements(hints.adjusted, snapshot)\n\n const statements: CompiledStatement[] = [\n ...hints.statements.map((statement) => ({ kind: 'hint' as const, sql: statement })),\n ...ddl.map((statement) => ({ kind: 'ddl' as const, sql: statement.replace(/;\\s*$/, '') })),\n ]\n return { namespace: canonical.namespace, schema, statements, snapshot }\n}\n\nconst previousId = (snapshot: NamespaceSnapshot): string | undefined => (snapshot as { id?: string }).id\n","/**\n * Compiled-operation IR — THE frozen contract between the GraphQL compiler\n * (push time, CLI preview + canonical server compile) and the data-plane\n * executor (runtime). The artifact is inert, validated JSON: no generated\n * code ever crosses the registry (plan §4).\n *\n * Design invariants:\n * - Policies are BAKED IN at compile time: every table-touching node carries\n * its read policy AND-ed into `where` (or `writePolicy`/`insertCheck` for\n * mutation targets). Execution needs only (IR, claims, variables).\n * - §4f dynamic slots: a variable typed with a generated input type\n * (BoolExp/OrderBy/SelectColumn/InsertInput/SetInput/AppendInput/OnConflict)\n * marks a dynamic slot. The executor validates the runtime value against\n * the artifact's per-table whitelist metadata, lowers it to Drizzle, and\n * ANDs it with the baked policy — the policy is non-negotiable regardless\n * of what the client sends.\n * - `capability`/`role` predicate leaves resolve to booleans against the\n * caller's claims BEFORE execution, pruning dead branches per caller.\n * - Versioned via `irVersion` + `normalizeIr` (the normalizeSnapshot\n * pattern): executor upgrades decouple from artifact re-pushes.\n */\nimport { z } from 'zod'\nimport { COLUMN_TYPES, type ColumnType } from '../canonical/v2.js'\n\nexport const IR_VERSION = 1 as const\n\n// ---------------------------------------------------------------------------\n// Values & claims\n// ---------------------------------------------------------------------------\n\n/** The exact claim keys the platform stamps — mirrors claims.ts. */\nexport const CLAIMS_CONTRACT = {\n sub: 'string',\n org: 'string?',\n roles: 'string[]',\n capabilities: 'string[]',\n} as const\nexport type ClaimKey = 'sub' | 'org'\n\nconst scalarLiteral = z.union([z.string(), z.number(), z.boolean(), z.null()])\n\nexport const valueIrSchema = z.discriminatedUnion('kind', [\n z.object({ kind: z.literal('literal'), value: z.union([scalarLiteral, z.array(scalarLiteral)]) }),\n z.object({ kind: z.literal('variable'), name: z.string() }),\n z.object({ kind: z.literal('claim'), key: z.enum(['sub', 'org']) }),\n])\nexport type ValueIr = z.infer<typeof valueIrSchema>\n\n// ---------------------------------------------------------------------------\n// Predicates\n// ---------------------------------------------------------------------------\n\nexport const CMP_OPS = [\n 'eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'in', 'nin',\n 'like', 'ilike', 'isNull', 'contains', 'hasKey',\n] as const\nexport type CmpOp = (typeof CMP_OPS)[number]\n\nexport type PredIr =\n | { kind: 'and'; operands: PredIr[] }\n | { kind: 'or'; operands: PredIr[] }\n | { kind: 'not'; operand: PredIr }\n | { kind: 'cmp'; op: CmpOp; column: string; value: ValueIr }\n /** EXISTS through a declared link; `where` runs against the target table. */\n | { kind: 'exists'; link: string; where: PredIr }\n /** Aggregation predicate (Hasura `rel_aggregate: { count: { predicate } }`). */\n | { kind: 'aggPredicate'; link: string; fn: 'count'; op: Exclude<CmpOp, 'in' | 'nin' | 'like' | 'ilike' | 'isNull' | 'contains' | 'hasKey'>; value: number; where?: PredIr }\n /** Boolean claims leaves — pre-resolved against claims before execution. */\n | { kind: 'capability'; key: string }\n | { kind: 'role'; key: string }\n /** §4f: a client-supplied BoolExp variable lands here, validated + lowered at runtime. */\n | { kind: 'dynamicFilter'; slot: string }\n | { kind: 'const'; value: boolean }\n\nexport const predIrSchema: z.ZodType<PredIr> = z.lazy(() =>\n z.discriminatedUnion('kind', [\n z.object({ kind: z.literal('and'), operands: z.array(predIrSchema).min(1) }),\n z.object({ kind: z.literal('or'), operands: z.array(predIrSchema).min(1) }),\n z.object({ kind: z.literal('not'), operand: predIrSchema }),\n z.object({ kind: z.literal('cmp'), op: z.enum(CMP_OPS), column: z.string(), value: valueIrSchema }),\n z.object({ kind: z.literal('exists'), link: z.string(), where: predIrSchema }),\n z.object({\n kind: z.literal('aggPredicate'), link: z.string(), fn: z.literal('count'),\n op: z.enum(['eq', 'neq', 'gt', 'gte', 'lt', 'lte']), value: z.number(),\n where: predIrSchema.optional(),\n }),\n z.object({ kind: z.literal('capability'), key: z.string() }),\n z.object({ kind: z.literal('role'), key: z.string() }),\n z.object({ kind: z.literal('dynamicFilter'), slot: z.string() }),\n z.object({ kind: z.literal('const'), value: z.boolean() }),\n ]),\n) as z.ZodType<PredIr>\n\n// ---------------------------------------------------------------------------\n// Ordering / paging\n// ---------------------------------------------------------------------------\n\nexport const orderIrSchema = z.discriminatedUnion('kind', [\n z.object({\n kind: z.literal('column'),\n column: z.string(),\n /** Order through a to-one link: `link` is set and `column` is on the target. */\n link: z.string().optional(),\n direction: z.enum(['asc', 'desc']),\n nulls: z.enum(['first', 'last']).optional(),\n }),\n /** §4f: `$orderBy: [FooOrderBy!]` variable — validated + lowered at runtime. */\n z.object({ kind: z.literal('dynamic'), slot: z.string() }),\n])\nexport type OrderIr = z.infer<typeof orderIrSchema>\n\nexport const limitIrSchema = z.object({\n /** Fixed value or a variable, clamped to [1, max]; absent → default. */\n variable: z.string().optional(),\n value: z.number().int().positive().optional(),\n default: z.number().int().positive(),\n max: z.number().int().positive(),\n})\nexport type LimitIr = z.infer<typeof limitIrSchema>\n\n// ---------------------------------------------------------------------------\n// Selections\n// ---------------------------------------------------------------------------\n\nexport interface SelectionIr {\n /** GraphQL type name for __typename synthesis + Apollo normalization. */\n typename: string\n columns: Array<{ alias: string; column: string }>\n relations: Array<{\n alias: string\n link: string\n selection: SelectionIr\n /** Fixed shape from the document; policy for the target table is ALSO\n * injected by the compiler into this `where` — never trust it absent. */\n where?: PredIr\n orderBy?: OrderIr[]\n limit?: LimitIr\n offset?: { variable?: string; value?: number }\n }>\n aggregates: Array<{\n alias: string\n /** Absent link = same-table aggregate (used by aggregate roots). */\n link?: string\n where?: PredIr\n count?: { columns?: string[]; distinct?: boolean }\n sum?: string[]\n avg?: string[]\n /** `nodes { }` selection inside an aggregate block. */\n nodes?: SelectionIr\n }>\n}\n\nconst selectionIrSchema: z.ZodType<SelectionIr> = z.lazy(() =>\n z.object({\n typename: z.string(),\n columns: z.array(z.object({ alias: z.string(), column: z.string() })),\n relations: z.array(z.object({\n alias: z.string(),\n link: z.string(),\n selection: selectionIrSchema,\n where: predIrSchema.optional(),\n orderBy: z.array(orderIrSchema).optional(),\n limit: limitIrSchema.optional(),\n offset: z.object({ variable: z.string().optional(), value: z.number().int().optional() }).optional(),\n })),\n aggregates: z.array(z.object({\n alias: z.string(),\n link: z.string().optional(),\n where: predIrSchema.optional(),\n count: z.object({ columns: z.array(z.string()).optional(), distinct: z.boolean().optional() }).optional(),\n sum: z.array(z.string()).optional(),\n avg: z.array(z.string()).optional(),\n nodes: selectionIrSchema.optional(),\n })),\n }),\n) as z.ZodType<SelectionIr>\n\nexport { selectionIrSchema }\n\n// ---------------------------------------------------------------------------\n// Roots\n// ---------------------------------------------------------------------------\n\n/** `@include(if: $var)` / `@skip(if: $var)` on a root field. */\nconst includeIfSchema = z.object({ variable: z.string(), negated: z.boolean() })\n\nconst selectRootSchema = z.object({\n kind: z.literal('select'),\n alias: z.string(),\n table: z.string(),\n selection: selectionIrSchema,\n /** Composed at compile time: AND(policy, documentWhere?, dynamicFilter?). */\n where: predIrSchema,\n orderBy: z.array(orderIrSchema).default([]),\n distinctOn: z.union([z.array(z.string()), z.object({ slot: z.string() })]).optional(),\n limit: limitIrSchema,\n offset: z.object({ variable: z.string().optional(), value: z.number().int().optional() }).optional(),\n includeIf: includeIfSchema.optional(),\n})\n\nconst byPkRootSchema = z.object({\n kind: z.literal('byPk'),\n alias: z.string(),\n table: z.string(),\n selection: selectionIrSchema,\n pk: z.array(z.object({ column: z.string(), value: valueIrSchema })).min(1),\n /** Policy predicate — ANDed with the PK match. */\n where: predIrSchema,\n includeIf: includeIfSchema.optional(),\n})\n\nconst aggregateRootSchema = z.object({\n kind: z.literal('aggregate'),\n alias: z.string(),\n table: z.string(),\n where: predIrSchema,\n count: z.object({ columns: z.array(z.string()).optional(), distinct: z.boolean().optional() }).optional(),\n sum: z.array(z.string()).optional(),\n avg: z.array(z.string()).optional(),\n nodes: selectionIrSchema.optional(),\n includeIf: includeIfSchema.optional(),\n})\n\n/** Column → value map for _set/_append/_inc, or a §4f whole-input slot. */\nconst writeValuesSchema = z.union([\n z.object({ slot: z.string() }),\n z.object({ entries: z.array(z.object({ column: z.string(), value: valueIrSchema })) }),\n])\n\nconst onConflictIrSchema = z.union([\n z.object({ slot: z.string() }),\n z.object({ constraint: z.string(), updateColumns: z.array(z.string()) }),\n])\n\nconst mutationRootSchema = z.object({\n kind: z.literal('mutation'),\n op: z.enum(['insert', 'insertOne', 'update', 'updateByPk', 'delete', 'deleteByPk']),\n alias: z.string(),\n table: z.string(),\n /** insert/insertOne: rows come from a slot ($object/$objects) or literals. */\n objects: z.union([\n z.object({ slot: z.string() }),\n z.object({ rows: z.array(z.array(z.object({ column: z.string(), value: valueIrSchema }))) }),\n ]).optional(),\n /** Server-pinned columns (e.g. author_sub ← claim('sub')) merged into every inserted row. */\n pinnedColumns: z.array(z.object({ column: z.string(), value: valueIrSchema })).default([]),\n onConflict: onConflictIrSchema.optional(),\n set: writeValuesSchema.optional(),\n append: writeValuesSchema.optional(),\n inc: writeValuesSchema.optional(),\n /** update/delete row filter: AND(writePolicy, documentWhere/pk, dynamicFilter?). */\n where: predIrSchema.optional(),\n pk: z.array(z.object({ column: z.string(), value: valueIrSchema })).optional(),\n /** WITH CHECK analogue evaluated against NEW row values (insert/update). */\n insertCheck: predIrSchema.optional(),\n returning: selectionIrSchema.nullable(),\n affectedRows: z.boolean().default(false),\n includeIf: includeIfSchema.optional(),\n})\n\nconst actionRootSchema = z.object({\n kind: z.literal('action'),\n alias: z.string(),\n name: z.string(),\n params: z.array(z.object({ name: z.string(), value: valueIrSchema })),\n returns: z.enum(['rows', 'rowsAffected', 'scalar']),\n})\n\nexport const rootIrSchema = z.discriminatedUnion('kind', [\n selectRootSchema, byPkRootSchema, aggregateRootSchema, mutationRootSchema, actionRootSchema,\n])\nexport type RootIr = z.infer<typeof rootIrSchema>\n\n// ---------------------------------------------------------------------------\n// Variables (§4f dynamic slots) & operations\n// ---------------------------------------------------------------------------\n\nexport const INPUT_REF_KINDS = [\n 'boolExp', 'orderBy', 'selectColumn', 'insertInput', 'setInput', 'appendInput', 'onConflict',\n] as const\nexport type InputRefKind = (typeof INPUT_REF_KINDS)[number]\n\n/**\n * A declared GraphQL variable default, persisted verbatim so an omitted\n * variable resolves to it instead of silently becoming NULL. Wrapped in an\n * object so an explicit `= null` stays distinguishable from \"no default\".\n * Only shapes `ValueIr` can carry are representable — the restrict pass\n * rejects anything else (including §4f slot defaults) at compile time.\n */\nexport const variableDefaultIrSchema = z.object({\n value: z.union([scalarLiteral, z.array(scalarLiteral)]),\n})\nexport type VariableDefaultIr = z.infer<typeof variableDefaultIrSchema>\n\nexport const variableIrSchema = z.object({\n name: z.string(),\n type: z.union([\n z.object({ kind: z.literal('scalar'), scalar: z.enum(COLUMN_TYPES) }),\n /** `values` is the declared membership whitelist — the executor validates against it. */\n z.object({ kind: z.literal('enum'), name: z.string(), values: z.array(z.string()).min(1) }),\n /** §4f dynamic slot: validated against `tables[table]` whitelists at runtime. */\n z.object({ kind: z.literal('inputRef'), input: z.enum(INPUT_REF_KINDS), table: z.string() }),\n ]),\n nullable: z.boolean(),\n list: z.boolean(),\n /** Absent = no default declared; see {@link variableDefaultIrSchema}. */\n defaultValue: variableDefaultIrSchema.optional(),\n})\nexport type VariableIr = z.infer<typeof variableIrSchema>\n\nexport const compiledOperationSchema = z.object({\n irVersion: z.literal(IR_VERSION),\n name: z.string(),\n opHash: z.string().regex(/^sha256:[0-9a-f]{64}$/),\n kind: z.enum(['query', 'mutation', 'action']),\n requires: z.object({\n capability: z.string().optional(),\n role: z.string().optional(),\n }).nullable(),\n variables: z.array(variableIrSchema),\n /** Every table the op touches — data-token scoping + audit. */\n tableSet: z.array(z.string()).min(1),\n roots: z.array(rootIrSchema).min(1),\n})\nexport type CompiledOperation = z.infer<typeof compiledOperationSchema>\n\n// ---------------------------------------------------------------------------\n// Artifact: per-table runtime metadata + the operation set\n// ---------------------------------------------------------------------------\n\n/**\n * Runtime whitelist metadata per table — everything the executor needs to\n * build Drizzle table objects, validate §4f dynamic inputs, and lower them.\n * Derived from the canonical definition at compile time.\n */\nexport const tableMetaIrSchema = z.object({\n table: z.string(),\n schema: z.string(),\n typename: z.string(),\n columns: z.array(z.object({\n name: z.string(),\n columnName: z.string(),\n type: z.union([z.enum(COLUMN_TYPES), z.object({ enum: z.string(), values: z.array(z.string()) })]),\n nullable: z.boolean(),\n })),\n primaryKey: z.array(z.string()).min(1),\n links: z.array(z.object({\n name: z.string(),\n kind: z.enum(['toOne', 'toMany', 'toPlatformUser']),\n target: z.string(),\n on: z.string(),\n references: z.string(),\n })),\n /** §4f whitelists: what dynamic inputs may reference. */\n filterable: z.array(z.string()),\n orderable: z.array(z.string()),\n insertable: z.array(z.string()),\n settable: z.array(z.string()),\n appendable: z.array(z.string()),\n constraints: z.array(z.object({ name: z.string(), columns: z.array(z.string()) })),\n /** Depth/node caps for dynamic filter trees on this table. */\n dynamicFilterMaxDepth: z.number().int().positive().default(6),\n dynamicFilterMaxNodes: z.number().int().positive().default(64),\n})\nexport type TableMetaIr = z.infer<typeof tableMetaIrSchema>\n\nexport const compiledArtifactSchema = z.object({\n irVersion: z.literal(IR_VERSION),\n namespace: z.string(),\n schemaHash: z.string(),\n opsHash: z.string(),\n tables: z.record(z.string(), tableMetaIrSchema),\n operations: z.record(z.string(), compiledOperationSchema),\n})\nexport type CompiledArtifact = z.infer<typeof compiledArtifactSchema>\n\n// ---------------------------------------------------------------------------\n// Versioning shim\n// ---------------------------------------------------------------------------\n\nexport class IrVersionError extends Error {\n constructor(found: unknown) {\n super(`Unsupported IR version ${String(found)} — this executor supports up to ${IR_VERSION}. ` +\n 'Upgrade @sequenceholdings/orm or re-push the namespace.')\n this.name = 'IrVersionError'\n }\n}\n\n/**\n * Validate + normalize a raw registry artifact (the normalizeSnapshot\n * pattern): future IR versions add upgrade branches here so executor\n * upgrades decouple from artifact re-pushes. Never trust registry jsonb —\n * the data plane calls this on every artifact load.\n */\nexport function normalizeIr(raw: unknown): CompiledArtifact {\n if (!raw || typeof raw !== 'object') throw new IrVersionError(undefined)\n const version = (raw as { irVersion?: unknown }).irVersion\n if (version !== IR_VERSION) throw new IrVersionError(version)\n return compiledArtifactSchema.parse(raw)\n}\n\n/** Index an artifact's operations by opHash (the wire selector). */\nexport function indexByHash(artifact: CompiledArtifact): Map<string, CompiledOperation> {\n const map = new Map<string, CompiledOperation>()\n for (const op of Object.values(artifact.operations)) map.set(op.opHash, op)\n return map\n}\n","import { referencedExecuteCapabilities } from '../compiler/actions.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { referencedCapabilities } from '../predicate/ast.js'\nimport { validateCapabilityPins, type CustomRolesBlock } from './custom-roles-block.js'\nimport { isQualifiedReference } from './identifiers.js'\nimport type { NamespaceConfig } from './namespace-config.js'\nimport { columnTypeGroup, indexName, type TableFile } from './table.js'\n\n/**\n * The namespace's Custom Roles manifest block — the platform grammar, verbatim\n * (see custom-roles-block.ts). `roles` declares capabilities + roles (grants,\n * inherits); `uses` attaches existing capabilities. Reconciled into the Custom\n * Roles attachment set at apply, so it's grantable and enters claim resolution.\n */\nexport interface NamespaceCapabilities {\n readonly roles: CustomRolesBlock\n readonly uses: readonly string[]\n}\n\nexport interface NamespaceDefinition {\n readonly namespace: string\n readonly description: string | null\n readonly capabilities: NamespaceCapabilities\n readonly tables: readonly TableFile[]\n}\n\nconst EMPTY_CAPABILITIES: NamespaceCapabilities = { roles: { definitions: {}, capabilities: {} }, uses: [] }\n\n/** The capability claim keys the block declares — bare declarations plus every attach. */\nexport function declaredCapabilityKeys(capabilities: NamespaceCapabilities): Set<string> {\n return new Set<string>([...Object.keys(capabilities.roles.capabilities), ...capabilities.uses])\n}\n\nexport interface DefinitionFile {\n readonly file: string\n readonly table: TableFile\n}\n\nexport function buildNamespaceDefinition(\n files: readonly DefinitionFile[],\n config?: NamespaceConfig,\n): NamespaceDefinition {\n if (files.length === 0) throw new OrmDefinitionError('no table definitions found')\n\n const namespace = (files[0] as DefinitionFile).table.namespace\n if (config && config.namespace !== namespace) {\n throw new OrmDefinitionError(`namespace '${config.namespace}' conflicts with '${namespace}'`, 'namespace.yaml')\n }\n for (const { file, table } of files) {\n if (table.namespace !== namespace) {\n throw new OrmDefinitionError(`namespace '${table.namespace}' conflicts with '${namespace}'`, file)\n }\n }\n\n const seen = new Map<string, string>()\n for (const { file, table } of files) {\n const existing = seen.get(table.table)\n if (existing) throw new OrmDefinitionError(`table '${table.table}' is already defined in ${existing}`, file)\n seen.set(table.table, file)\n }\n\n // Actions are addressed namespace-wide (/actions/<name>) — a name must\n // resolve to exactly one action regardless of which table file declared it.\n const actionsSeen = new Map<string, string>()\n for (const { file, table } of files) {\n for (const name of Object.keys(table.actions ?? {})) {\n const existing = actionsSeen.get(name)\n if (existing) throw new OrmDefinitionError(`action '${name}' is already defined in ${existing}`, file)\n actionsSeen.set(name, file)\n }\n }\n\n const capabilities: NamespaceCapabilities = config?.capabilities\n ? { roles: config.capabilities.roles ?? EMPTY_CAPABILITIES.roles, uses: config.capabilities.uses ?? [] }\n : EMPTY_CAPABILITIES\n const pinIssues = validateCapabilityPins({ uses: capabilities.uses, roles: capabilities.roles })\n if (pinIssues.length > 0) throw new OrmDefinitionError(pinIssues.join('; '), 'namespace.yaml')\n const tables = files.map(({ table }) => table).sort((a, b) => a.table.localeCompare(b.table))\n const byName = new Map(tables.map((table) => [table.table, table]))\n validateLocalLinks(files, byName)\n validateActionValidates(files, byName)\n validateIndexNames(files)\n validateCapabilityRefs(files, declaredCapabilityKeys(capabilities))\n return { namespace, description: config?.description ?? null, capabilities, tables }\n}\n\n/**\n * A `validates: exists('<table>', <param>)` entry only resolves at execute\n * time against a real local table — an unknown target (or a param that can\n * never match the target's primary key) is an action that can never pass,\n * so fail at build like links do. Qualified references stay soft.\n */\nfunction validateActionValidates(files: readonly DefinitionFile[], byName: ReadonlyMap<string, TableFile>): void {\n for (const { file, table } of files) {\n for (const [actionName, action] of Object.entries(table.actions ?? {})) {\n for (const entry of action.validates ?? []) {\n if (entry.table.includes('.')) continue\n const target = byName.get(entry.table)\n if (!target) {\n throw new OrmDefinitionError(`action '${actionName}' validates against unknown table '${entry.table}'`, file)\n }\n if (target.source) {\n // Synced tables reflect their gold source and declare no primary\n // key, so the runtime exists() check has no key to resolve — it\n // would 422 every call. Reject at build rather than fail at run.\n throw new OrmDefinitionError(\n `action '${actionName}' validates against synced table '${entry.table}' — synced tables can't be validates targets`,\n file,\n )\n }\n const paramType = action.params?.[entry.param]?.type\n const targetPrimaryKey = Object.values(target.columns ?? {}).find((column) => column.primary_key)\n if (paramType && targetPrimaryKey && columnTypeGroup(paramType) !== columnTypeGroup(targetPrimaryKey.type)) {\n throw new OrmDefinitionError(\n `action '${actionName}' validates '${entry.param}' (${paramType}) against '${entry.table}' whose primary key is ${targetPrimaryKey.type}`,\n file,\n )\n }\n }\n }\n }\n}\n\n/**\n * Postgres index names are schema-scoped, not table-scoped — two tables in\n * one namespace declaring (or deriving) the same index name would build fine\n * and then fail on the second CREATE INDEX at apply. Reject at load instead.\n */\nfunction validateIndexNames(files: readonly DefinitionFile[]): void {\n // Everything here shares one pg_class relation namespace in the orm schema:\n // tables, declared indexes, and the indexes Postgres creates implicitly for\n // primary-key (`<table>_pkey`) and unique-column (`<table>_<col>_unique`)\n // constraints. Seed them all so any collision fails at load, not at apply.\n const seen = new Map<string, string>()\n const claim = (name: string, label: string, file: string) => {\n const existing = seen.get(name)\n if (existing) {\n throw new OrmDefinitionError(`relation name '${name}' (${label}) collides with ${existing}`, file)\n }\n seen.set(name, `${label} (${file})`)\n }\n\n for (const { file, table } of files) {\n claim(table.table, `table '${table.table}'`, file)\n }\n for (const { file, table } of files) {\n if (table.source) continue\n claim(`${table.table}_pkey`, `implicit primary-key index of '${table.table}'`, file)\n for (const [name, column] of Object.entries(table.columns ?? {})) {\n if (column.unique && !column.primary_key) {\n claim(`${table.table}_${name}_unique`, `implicit unique constraint of '${table.table}.${name}'`, file)\n }\n }\n }\n for (const { file, table } of files) {\n for (const definition of table.indexes ?? []) {\n claim(indexName(table.table, definition), `index on '${table.table}'`, file)\n }\n }\n}\n\nfunction validateLocalLinks(files: readonly DefinitionFile[], byName: ReadonlyMap<string, TableFile>): void {\n for (const { file, table } of files) {\n for (const [name, link] of Object.entries(table.links ?? {})) {\n if (isQualifiedReference(link.to)) continue\n const target = byName.get(link.to)\n if (!target) {\n throw new OrmDefinitionError(`link '${name}' references unknown table '${link.to}'`, file)\n }\n if (link.enforce && target.source) {\n throw new OrmDefinitionError(`link '${name}' cannot enforce a foreign key onto a synced table`, file)\n }\n // Soft links join at query time — a type mismatch with the target's\n // primary key can never match a row, so it fails at load like an\n // enforced one would fail at ALTER. Synced targets reflect their\n // source (no declared pk) and stay unchecked.\n // Group comparability, not exact equality — int4 = int8 joins fine.\n const sourceType = table.columns?.[link.on]?.type\n const targetPrimaryKey = Object.values(target.columns ?? {}).find((column) => column.primary_key)\n if (sourceType && targetPrimaryKey && columnTypeGroup(sourceType) !== columnTypeGroup(targetPrimaryKey.type)) {\n throw new OrmDefinitionError(\n `link '${name}' can never join: '${link.on}' is ${sourceType} but '${link.to}' has a ${targetPrimaryKey.type} primary key`,\n file,\n )\n }\n }\n }\n}\n\n/**\n * A capability reference only resolves at claim time if the namespace DECLARES\n * it — a capability that's neither declared (`capabilities.roles.capabilities`)\n * nor attached (`capabilities.uses`) never enters the attachment set, so it's\n * neither grantable in Custom Roles nor present in any caller's claims. An\n * undeclared reference is a policy that can never pass — fail at build.\n */\nfunction validateCapabilityRefs(files: readonly DefinitionFile[], declared: ReadonlySet<string>): void {\n for (const { file, table } of files) {\n const referenced = [\n ...(table.policies?.read ? referencedCapabilities(table.policies.read.ast) : []),\n ...(table.policies?.write ? referencedCapabilities(table.policies.write.ast) : []),\n ...Object.values(table.actions ?? {}).flatMap((action) => [\n ...(action.requires ? referencedCapabilities(action.requires.ast) : []),\n ...referencedExecuteCapabilities(action),\n ]),\n ]\n for (const key of referenced) {\n if (!declared.has(key)) {\n throw new OrmDefinitionError(\n `capability('${key}') is not declared — add it under capabilities.roles.capabilities or capabilities.uses in namespace.yaml`,\n file,\n )\n }\n }\n }\n}\n","import { z } from 'zod'\nimport { capabilityPinsSchema, customRolesBlockSchema } from './custom-roles-block.js'\nimport { namespaceSchema } from './identifiers.js'\n\n/**\n * The reserved `namespace.yaml` — namespace-level settings beside the table\n * files. `capabilities` is the platform's Custom Roles manifest block, authored\n * exactly as an artifact or managed function authors it:\n * - `capabilities.roles.capabilities` declares namespace-scoped capabilities\n * (published on the namespace's registry scope + pinned at apply),\n * - `capabilities.roles.definitions` declares roles (grants + inherits) that\n * bundle those capabilities,\n * - `capabilities.uses` attaches EXISTING capabilities — `org/<key>` for an\n * org capability (namespaces never create org entities), or a bare `<key>`\n * already published on the namespace scope.\n * Apply feeds this block straight to the shared attachment reconciler, so the\n * capabilities are grantable in Custom Roles and enter claim resolution.\n */\nexport const namespaceConfigSchema = z.strictObject({\n namespace: namespaceSchema,\n description: z.string().optional(),\n capabilities: z\n .strictObject({\n roles: customRolesBlockSchema.optional(),\n uses: capabilityPinsSchema.optional(),\n })\n .optional(),\n})\n\nexport type NamespaceConfig = z.output<typeof namespaceConfigSchema>\n","import { readdir, readFile } from 'node:fs/promises'\nimport { extname, join } from 'node:path'\nimport { load as loadYaml } from 'js-yaml'\nimport { z } from 'zod'\nimport {\n DEFINITION_FILE_EXTENSIONS,\n MAX_DEFINITION_FILE_BYTES,\n NAMESPACE_CONFIG_FILENAMES,\n} from './constants.js'\nimport { OrmDefinitionError } from './errors.js'\nimport { computeDefinitionHash } from './hash.js'\nimport { buildNamespaceDefinition, type DefinitionFile, type NamespaceDefinition } from './schema/namespace.js'\nimport { namespaceConfigSchema, type NamespaceConfig } from './schema/namespace-config.js'\nimport { tableFileSchema } from './schema/table.js'\n\nexport interface LoadedNamespace {\n readonly definition: NamespaceDefinition\n readonly contentHash: string\n readonly files: readonly string[]\n}\n\nexport function parseTableFile(file: string, contents: string): DefinitionFile {\n const parsed = tableFileSchema.safeParse(parseYaml(file, contents))\n if (!parsed.success) throw new OrmDefinitionError(formatIssues(parsed.error), file)\n return { file, table: parsed.data }\n}\n\nexport interface DefinitionSource {\n readonly path: string\n readonly contents: string\n}\n\n/**\n * Raw sources → validated definition, splitting the reserved namespace\n * config file from the table files. The one parse path for the loader and\n * the registry, so a local directory and an uploaded bundle can't diverge.\n */\nexport function parseDefinitionSources(sources: readonly DefinitionSource[]): NamespaceDefinition {\n let config: NamespaceConfig | undefined\n const tables: DefinitionFile[] = []\n for (const source of sources) {\n if (NAMESPACE_CONFIG_FILENAMES.has(source.path)) {\n if (config) throw new OrmDefinitionError('duplicate namespace config file', source.path)\n const parsed = namespaceConfigSchema.safeParse(parseYaml(source.path, source.contents))\n if (!parsed.success) throw new OrmDefinitionError(formatIssues(parsed.error), source.path)\n config = parsed.data\n continue\n }\n tables.push(parseTableFile(source.path, source.contents))\n }\n return buildNamespaceDefinition(tables, config)\n}\n\nexport async function loadNamespaceDefinition(dir: string): Promise<LoadedNamespace> {\n const files = await listDefinitionFiles(dir)\n if (files.length === 0) throw new OrmDefinitionError(`no ${DEFINITION_FILE_EXTENSIONS.join('/')} files in ${dir}`)\n\n const sources: DefinitionSource[] = []\n for (const file of files) {\n const contents = await readFile(join(dir, file), 'utf8')\n if (Buffer.byteLength(contents, 'utf8') > MAX_DEFINITION_FILE_BYTES) {\n throw new OrmDefinitionError(`exceeds the maximum definition file size of ${MAX_DEFINITION_FILE_BYTES} bytes`, file)\n }\n sources.push({ path: file, contents })\n }\n\n const definition = parseDefinitionSources(sources)\n return { definition, contentHash: computeDefinitionHash(definition), files }\n}\n\nfunction parseYaml(file: string, contents: string): unknown {\n try {\n return loadYaml(contents)\n } catch (error) {\n throw new OrmDefinitionError(error instanceof Error ? error.message : 'invalid YAML', file)\n }\n}\n\nconst isDefinitionFile = (name: string): boolean =>\n DEFINITION_FILE_EXTENSIONS.some((extension) => extname(name) === extension)\n\nasync function listDefinitionFiles(dir: string): Promise<string[]> {\n const entries = await readdir(dir, { withFileTypes: true })\n return entries\n .filter((entry) => entry.isFile() && isDefinitionFile(entry.name))\n .map((entry) => entry.name)\n .sort()\n}\n\nfunction formatIssues(error: z.ZodError): string {\n return error.issues\n .map((issue) => (issue.path.length > 0 ? `${issue.path.join('.')}: ${issue.message}` : issue.message))\n .join('; ')\n}\n","import type { CompiledStatement } from '../engine/index.js'\n\nexport interface DestructiveStatement {\n readonly sql: string\n readonly reason: string\n}\n\n/** A column type change — `SET DATA TYPE` / `TYPE`. Data-losing in general (numeric→integer rounds, a narrowing text cast truncates). */\nconst TYPE_CHANGE = /\\bALTER\\s+COLUMN\\s+\"?[a-z_][a-z0-9_]*\"?\\s+(?:SET\\s+DATA\\s+)?TYPE\\b/i\n\n/**\n * Statements that lose data if they run. `ddl` statements match the rules\n * below; `security` statements are a drop-and-recreate of policies by design\n * and always safe. Of the `hint` statements (the declared rename/cast\n * rewrites), a RENAME never loses data, but a declared `cast:` is still a type\n * change that can — declaring HOW to convert is not the same as consenting to\n * the data loss, so a cast hint stays gated on `--allow-destructive` too.\n */\nconst RULES: ReadonlyArray<{ pattern: RegExp; reason: string }> = [\n { pattern: /^\\s*DROP\\s+SCHEMA\\b/i, reason: 'drops the namespace schema and everything in it' },\n { pattern: /^\\s*DROP\\s+TABLE\\b/i, reason: 'drops a table and all of its rows' },\n { pattern: /^\\s*TRUNCATE\\b/i, reason: 'deletes every row' },\n { pattern: /\\bDROP\\s+COLUMN\\b/i, reason: 'drops a column and its data' },\n {\n pattern: TYPE_CHANGE,\n reason: \"changes a column type without a declared cast (add `cast: '<column>::<type>'` to make the conversion explicit)\",\n },\n]\n\nexport function classifyDestructive(statements: readonly CompiledStatement[]): DestructiveStatement[] {\n const flagged: DestructiveStatement[] = []\n for (const statement of statements) {\n if (statement.kind === 'ddl') {\n const rule = RULES.find(({ pattern }) => pattern.test(statement.sql))\n if (rule) flagged.push({ sql: statement.sql, reason: rule.reason })\n } else if (statement.kind === 'hint' && TYPE_CHANGE.test(statement.sql)) {\n flagged.push({ sql: statement.sql, reason: 'a declared cast changes a column type and can lose data (numeric→integer rounds, a narrowing cast truncates)' })\n }\n }\n return flagged\n}\n","import { createHash } from 'node:crypto'\nimport { mkdir, readFile, writeFile } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport { z } from 'zod'\nimport { OrmDefinitionError } from '../errors.js'\nimport type { NamespaceSnapshot, PlannedMigration } from '../engine/index.js'\n\n/**\n * The committed migration workspace inside a definitions directory:\n *\n * <dir>/migrations/NNNN_<hash12>.sql reviewable statements\n * <dir>/migrations/meta/NNNN.snapshot.json desired-state snapshot after NNNN\n * <dir>/migrations/meta/journal.json ordered index with checksums\n *\n * `orm diff` appends to it; `orm diff --check` (the CI gate) verifies it\n * matches the definitions with no database and no credentials. Everything\n * here is deterministic from (previous snapshot, definition) so the gate\n * can regenerate and byte-compare.\n */\nexport const MIGRATIONS_DIRNAME = 'migrations'\nconst META_DIRNAME = 'meta'\nconst JOURNAL_FILENAME = 'journal.json'\n\nconst journalEntrySchema = z.object({\n ordinal: z.number().int().positive(),\n name: z.string().min(1),\n content_hash: z.string().length(64),\n /** Definitions hash the migration was diffed FROM — null on the first. Replay checks an environment sits at this base. */\n previous_content_hash: z.string().length(64).nullable(),\n checksum: z.string().length(64),\n /** sha256 of the snapshot FILE — the next diff builds on this snapshot, so a hand-edit must fail `--check` too. */\n snapshot_checksum: z.string().length(64),\n destructive: z.boolean(),\n})\n\nconst journalSchema = z.object({\n version: z.literal(1),\n namespace: z.string().min(1),\n entries: z.array(journalEntrySchema),\n})\n\nexport type MigrationJournal = z.infer<typeof journalSchema>\nexport type JournalEntry = z.infer<typeof journalEntrySchema>\n\nexport interface MigrationWorkspace {\n readonly journal: MigrationJournal\n /** Snapshot at the journal tip — the previous input for the next diff. */\n readonly tipSnapshot: NamespaceSnapshot | undefined\n}\n\nexport const emptyJournal = (namespace: string): MigrationJournal => ({ version: 1, namespace, entries: [] })\n\nexport async function readMigrationWorkspace(dir: string, namespace: string): Promise<MigrationWorkspace> {\n const journalPath = join(dir, MIGRATIONS_DIRNAME, META_DIRNAME, JOURNAL_FILENAME)\n const raw = await readFile(journalPath, 'utf8').catch(() => null)\n if (raw === null) return { journal: emptyJournal(namespace), tipSnapshot: undefined }\n\n const parsed = journalSchema.safeParse(parseJson(journalPath, raw))\n if (!parsed.success) {\n throw new OrmDefinitionError(`invalid migration journal: ${parsed.error.issues[0]?.message ?? 'unreadable'}`, journalPath)\n }\n if (parsed.data.namespace !== namespace) {\n throw new OrmDefinitionError(\n `migration journal belongs to namespace '${parsed.data.namespace}', definitions are '${namespace}'`,\n journalPath,\n )\n }\n parsed.data.entries.forEach((entry, index) => {\n if (entry.ordinal !== index + 1) {\n throw new OrmDefinitionError(`migration journal entries must be contiguous from 1 (found ${entry.name})`, journalPath)\n }\n })\n\n const tip = parsed.data.entries.at(-1)\n return { journal: parsed.data, tipSnapshot: tip ? await readSnapshot(dir, tip.ordinal) : undefined }\n}\n\nexport async function readSnapshotText(dir: string, ordinal: number): Promise<string> {\n const path = join(dir, MIGRATIONS_DIRNAME, META_DIRNAME, `${pad(ordinal)}.snapshot.json`)\n return readFile(path, 'utf8').catch(() => {\n throw new OrmDefinitionError('missing migration snapshot', path)\n })\n}\n\nexport async function readSnapshot(dir: string, ordinal: number): Promise<NamespaceSnapshot> {\n const path = join(dir, MIGRATIONS_DIRNAME, META_DIRNAME, `${pad(ordinal)}.snapshot.json`)\n return parseJson(path, await readSnapshotText(dir, ordinal)) as NamespaceSnapshot\n}\n\nexport async function readMigrationSql(dir: string, entry: JournalEntry): Promise<string> {\n const path = join(dir, MIGRATIONS_DIRNAME, `${entry.name}.sql`)\n return readFile(path, 'utf8').catch(() => {\n throw new OrmDefinitionError('missing migration file', path)\n })\n}\n\nexport const checksumOf = (text: string): string => createHash('sha256').update(text).digest('hex')\n\nexport const migrationName = (ordinal: number, contentHash: string): string => `${pad(ordinal)}_${contentHash.slice(0, 12)}`\n\nexport function renderMigrationSql({\n name,\n namespace,\n contentHash,\n plan,\n}: {\n name: string\n namespace: string\n contentHash: string\n plan: PlannedMigration\n}): string {\n const header = [\n `-- ${name}`,\n `-- namespace: ${namespace}`,\n `-- content hash: ${contentHash}`,\n '-- generated by `seq-studio orm diff` — review and commit, do not edit',\n ].join('\\n')\n return [header, ...plan.statements.map((statement) => `${statement.sql};`)].join('\\n\\n') + '\\n'\n}\n\nexport interface WrittenMigration {\n readonly name: string\n readonly ordinal: number\n readonly destructive: boolean\n}\n\nexport async function writeMigration({\n dir,\n workspace,\n plan,\n contentHash,\n destructive,\n}: {\n dir: string\n workspace: MigrationWorkspace\n plan: PlannedMigration\n contentHash: string\n destructive: boolean\n}): Promise<WrittenMigration> {\n const tip = workspace.journal.entries.at(-1)\n const ordinal = (tip?.ordinal ?? 0) + 1\n const name = migrationName(ordinal, contentHash)\n const sql = renderMigrationSql({ name, namespace: workspace.journal.namespace, contentHash, plan })\n\n const metaDir = join(dir, MIGRATIONS_DIRNAME, META_DIRNAME)\n await mkdir(metaDir, { recursive: true })\n const snapshotText = `${JSON.stringify(plan.snapshot, null, 2)}\\n`\n await writeFile(join(dir, MIGRATIONS_DIRNAME, `${name}.sql`), sql)\n await writeFile(join(metaDir, `${pad(ordinal)}.snapshot.json`), snapshotText)\n\n const journal: MigrationJournal = {\n ...workspace.journal,\n entries: [\n ...workspace.journal.entries,\n {\n ordinal,\n name,\n content_hash: contentHash,\n previous_content_hash: tip?.content_hash ?? null,\n checksum: checksumOf(sql),\n snapshot_checksum: checksumOf(snapshotText),\n destructive,\n },\n ],\n }\n await writeFile(join(metaDir, JOURNAL_FILENAME), `${JSON.stringify(journal, null, 2)}\\n`)\n return { name, ordinal, destructive }\n}\n\nconst pad = (ordinal: number): string => String(ordinal).padStart(4, '0')\n\nfunction parseJson(path: string, raw: string): unknown {\n try {\n return JSON.parse(raw) as unknown\n } catch {\n throw new OrmDefinitionError('not valid JSON', path)\n }\n}\n","import { planMigration, type CompiledStatement } from '../engine/index.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport type { LoadedNamespace } from '../loader.js'\nimport {\n MIGRATIONS_DIRNAME,\n readMigrationSql,\n readMigrationWorkspace,\n readSnapshot,\n renderMigrationSql,\n} from './workspace.js'\n\n/**\n * The reviewed migration a registration carries: replay-only environments\n * (production, banksouth) execute nothing that doesn't match one of these.\n * Statements are recomputed at load and verified to reproduce the committed\n * file byte-for-byte, so the payload can never drift from what review saw.\n */\nexport interface CommittedMigration {\n readonly name: string\n readonly ordinal: number\n readonly previous_content_hash: string | null\n readonly destructive: boolean\n readonly checksum: string\n readonly statements: readonly CompiledStatement[]\n}\n\n/**\n * Load the workspace tip as a registration payload. Returns null when there\n * is no workspace (dev-loop registrations stay migration-less); throws when\n * a workspace exists but is stale or drifted — a half-true artifact is worse\n * than none.\n */\nexport async function loadCommittedTipMigration(\n dir: string,\n loaded: LoadedNamespace,\n): Promise<CommittedMigration | null> {\n const workspace = await readMigrationWorkspace(dir, loaded.definition.namespace)\n const tip = workspace.journal.entries.at(-1)\n if (!tip) return null\n\n if (tip.content_hash !== loaded.contentHash) {\n throw new OrmDefinitionError(\n `definitions changed since ${tip.name} — run \\`seq-studio orm diff\\` and commit the new migration`,\n `${MIGRATIONS_DIRNAME}/meta/journal.json`,\n )\n }\n\n const previousSnapshot = tip.ordinal > 1 ? await readSnapshot(dir, tip.ordinal - 1) : undefined\n const plan = await planMigration({ definition: loaded.definition, previousSnapshot })\n const regenerated = renderMigrationSql({\n name: tip.name,\n namespace: loaded.definition.namespace,\n contentHash: loaded.contentHash,\n plan,\n })\n if (regenerated !== (await readMigrationSql(dir, tip))) {\n throw new OrmDefinitionError(\n `${tip.name}.sql does not regenerate from the definitions — run \\`seq-studio orm diff --check\\``,\n MIGRATIONS_DIRNAME,\n )\n }\n\n return {\n name: tip.name,\n ordinal: tip.ordinal,\n previous_content_hash: tip.previous_content_hash,\n destructive: tip.destructive,\n checksum: tip.checksum,\n statements: plan.statements,\n }\n}\n\n/**\n * One link in the committed history: a migration's content hash and the hash it\n * was diffed FROM. This is an ancestry record, NOT executable SQL — a\n * registration carries the whole chain so a replay-only environment can prove\n * that its active version is a reviewed ancestor of the target (and thus that a\n * direct catch-up diff is in-lineage) even over migrations that were never\n * registered there (batched deploys, skipped releases). The catch-up apply then\n * runs the engine's own direct diff, never any SQL from this chain.\n */\nexport interface CommittedChainEntry {\n readonly name: string\n readonly contentHash: string\n readonly previousContentHash: string | null\n}\n\n/**\n * The committed hash chain for a definitions directory, oldest-first, taken from\n * the journal (already integrity-checked by `orm validate` / `diff --check`).\n * The tip must match the loaded definitions — a registration carries this so\n * replay-only environments can verify catch-up ancestry without those\n * intervening versions being registered. Empty when there is no workspace.\n */\nexport async function loadCommittedMigrations(dir: string, loaded: LoadedNamespace): Promise<CommittedChainEntry[]> {\n const workspace = await readMigrationWorkspace(dir, loaded.definition.namespace)\n const entries = workspace.journal.entries\n const tip = entries.at(-1)\n if (!tip) return []\n if (tip.content_hash !== loaded.contentHash) {\n throw new OrmDefinitionError(\n `definitions changed since ${tip.name} — run \\`seq-studio orm diff\\` and commit the new migration`,\n `${MIGRATIONS_DIRNAME}/meta/journal.json`,\n )\n }\n return entries.map((entry) => ({\n name: entry.name,\n contentHash: entry.content_hash,\n previousContentHash: entry.previous_content_hash,\n }))\n}\n","import { planMigration } from '../engine/index.js'\nimport { loadNamespaceDefinition } from '../loader.js'\nimport { classifyDestructive } from './classify.js'\nimport {\n MIGRATIONS_DIRNAME,\n checksumOf,\n readMigrationSql,\n readMigrationWorkspace,\n readSnapshot,\n readSnapshotText,\n renderMigrationSql,\n writeMigration,\n type JournalEntry,\n} from './workspace.js'\n\nexport interface DiffOptions {\n readonly dir: string\n readonly allowDestructive: boolean\n readonly check: boolean\n readonly log: (line: string) => void\n}\n\n/**\n * `orm diff` — append the next committed migration for a definitions\n * directory, diffed against the workspace's tip snapshot. `--check` is the\n * CI gate: no database, no credentials — verify checksums, the snapshot\n * chain, that the definitions match the journal tip, and that regenerating\n * the tip reproduces the committed file byte-for-byte.\n */\nexport async function diffCommand({ dir, allowDestructive, check, log }: DiffOptions): Promise<number> {\n const loaded = await loadNamespaceDefinition(dir)\n const workspace = await readMigrationWorkspace(dir, loaded.definition.namespace)\n const tip = workspace.journal.entries.at(-1)\n\n if (check) return checkWorkspace({ dir, loaded, workspace, tip, log })\n\n if (tip?.content_hash === loaded.contentHash) {\n log(`no changes — ${MIGRATIONS_DIRNAME}/${tip.name}.sql already matches the definitions`)\n return 0\n }\n\n const plan = await planMigration({ definition: loaded.definition, previousSnapshot: workspace.tipSnapshot })\n const destructive = classifyDestructive(plan.statements)\n if (destructive.length > 0 && !allowDestructive) {\n log('destructive migration blocked — these statements lose data:')\n for (const statement of destructive) log(` ${firstLine(statement.sql)} -- ${statement.reason}`)\n log(\"retire columns in two phases (`deprecated: true` first, drop later), declare type changes as `cast:`, or re-run with --allow-destructive to consent\")\n return 1\n }\n\n const written = await writeMigration({\n dir,\n workspace,\n plan,\n contentHash: loaded.contentHash,\n destructive: destructive.length > 0,\n })\n log(\n `wrote ${MIGRATIONS_DIRNAME}/${written.name}.sql — ${plan.statements.length} statement(s)` +\n (written.destructive ? ' (DESTRUCTIVE — consented via --allow-destructive)' : ''),\n )\n return 0\n}\n\nasync function checkWorkspace({\n dir,\n loaded,\n workspace,\n tip,\n log,\n}: {\n dir: string\n loaded: Awaited<ReturnType<typeof loadNamespaceDefinition>>\n workspace: Awaited<ReturnType<typeof readMigrationWorkspace>>\n tip: JournalEntry | undefined\n log: (line: string) => void\n}): Promise<number> {\n if (!tip) {\n log(`no committed migrations for '${loaded.definition.namespace}' — run \\`seq-studio orm diff\\` and commit the result`)\n return 1\n }\n\n let previousId: unknown\n let previousHash: string | null = null\n for (const entry of workspace.journal.entries) {\n const sql = await readMigrationSql(dir, entry)\n if (checksumOf(sql) !== entry.checksum) {\n log(`${MIGRATIONS_DIRNAME}/${entry.name}.sql does not match its journal checksum — committed migrations must not be edited`)\n return 1\n }\n const snapshotText = await readSnapshotText(dir, entry.ordinal)\n if (checksumOf(snapshotText) !== entry.snapshot_checksum) {\n log(`the snapshot for ${entry.name} does not match its journal checksum — committed snapshots must not be edited (the next diff builds on it)`)\n return 1\n }\n const snapshot = JSON.parse(snapshotText) as { id?: unknown; prevId?: unknown }\n if (entry.ordinal > 1 && snapshot.prevId !== previousId) {\n log(`snapshot chain broken at ${entry.name} — regenerate the workspace with \\`seq-studio orm diff\\``)\n return 1\n }\n if (entry.previous_content_hash !== previousHash) {\n log(`content-hash chain broken at ${entry.name} — migrations must be appended in order by \\`seq-studio orm diff\\``)\n return 1\n }\n previousId = snapshot.id\n previousHash = entry.content_hash\n }\n\n if (tip.content_hash !== loaded.contentHash) {\n log(`definitions changed since ${tip.name} — run \\`seq-studio orm diff\\` and commit the new migration`)\n return 1\n }\n\n const previousSnapshot = tip.ordinal > 1 ? await readSnapshot(dir, tip.ordinal - 1) : undefined\n const plan = await planMigration({ definition: loaded.definition, previousSnapshot })\n const regenerated = renderMigrationSql({\n name: tip.name,\n namespace: loaded.definition.namespace,\n contentHash: loaded.contentHash,\n plan,\n })\n if (regenerated !== (await readMigrationSql(dir, tip))) {\n log(`${MIGRATIONS_DIRNAME}/${tip.name}.sql does not regenerate from the definitions — re-run \\`seq-studio orm diff\\``)\n return 1\n }\n\n log(`migrations in sync — ${workspace.journal.entries.length} committed, tip ${tip.name}`)\n return 0\n}\n\nconst firstLine = (sql: string): string => sql.split('\\n')[0] ?? sql\n","import {\n canonicalDefinitionSchema,\n normalizeCanonical,\n CANONICAL_FORMAT,\n type CanonicalDefinition,\n} from '../canonical/v2.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { actionStatementSources, type ActionDefinition } from '../schema/actions.js'\nimport { isFunctionDefault, type ColumnDefinition } from '../schema/columns.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport type { TableFile } from '../schema/table.js'\n\n/**\n * v1 YAML `NamespaceDefinition` → canonical v2 (`orm migrate-from-yaml`).\n * Lossless where the v2 contract can express it, loud where it can't:\n *\n * - columns keep declaration order (order is meaningful for DDL); the v1\n * `default` splits into literal `default` vs allowlisted `defaultFn`\n * exactly along the isFunctionDefault line the v1 engine used;\n * - the single v1 `primary_key: true` column becomes `primaryKey: [name]`;\n * - policy expressions carry over as their verbatim DSL source strings\n * (re-parsed by the v2 predicate compiler, never the parsed v1 AST);\n * - actions carry over verbatim (multi-statement `executes` lists join on\n * ';\\n' — the boundaries stay recoverable for the compiled-op executor);\n * - the capabilities block passes through untouched (verbatim custom-roles\n * grammar in both formats);\n * - qualified (cross-namespace) link targets have no v2 representation —\n * links are namespace-local in v2 (plan §5) — so they fail the conversion\n * rather than silently dropping.\n *\n * The result re-validates through canonicalDefinitionSchema and normalizes,\n * so hashing and server-side re-validation see exactly what an authored v2\n * definition would produce.\n */\nexport function convertV1DefinitionToCanonical(definition: NamespaceDefinition): CanonicalDefinition {\n const raw = {\n definition_format: CANONICAL_FORMAT,\n namespace: definition.namespace,\n description: definition.description ?? undefined,\n enums: [],\n tables: definition.tables.map(convertTable),\n capabilities: {\n roles: definition.capabilities.roles,\n uses: [...definition.capabilities.uses],\n },\n }\n const parsed = canonicalDefinitionSchema.safeParse(raw)\n if (!parsed.success) {\n const issue = parsed.error.issues[0]\n throw new OrmDefinitionError(\n `converted definition is not valid canonical v2: ${issue ? `${issue.path.join('.')}: ${issue.message}` : 'unknown issue'}`,\n )\n }\n return normalizeCanonical(parsed.data)\n}\n\nfunction convertTable(table: TableFile) {\n const columns = Object.entries(table.columns ?? {})\n const primaryKey = columns.filter(([, column]) => column.primary_key).map(([name]) => name)\n return {\n table: table.table,\n description: table.description,\n source: table.source,\n columns: columns.map(([name, column]) => convertColumn(name, column)),\n // Synced tables reflect their source — no columns, no primary key.\n primaryKey: primaryKey.length > 0 ? primaryKey : undefined,\n links: Object.entries(table.links ?? {}).map(([name, link]) => convertLink(table.table, name, link)),\n indexes: (table.indexes ?? []).map((index) => ({\n columns: [...index.columns],\n unique: index.unique ?? false,\n name: index.name,\n })),\n policies: {\n // Verbatim DSL source strings — the parsed v1 AST is derived state.\n read: table.policies?.read?.source,\n write: table.policies?.write?.source,\n },\n actions: Object.entries(table.actions ?? {}).map(([name, action]) => convertAction(table.table, name, action)),\n }\n}\n\nfunction convertColumn(name: string, column: ColumnDefinition) {\n // The exact split the v1 engine applied at build time: only the allowlisted\n // function defaults were ever raw SQL; everything else is a literal.\n const isDefaultFn = column.default !== undefined && isFunctionDefault(column.default, column.type)\n return {\n name,\n columnName: name,\n type: column.type,\n nullable: column.primary_key ? false : column.nullable !== false,\n unique: column.unique === true,\n default: isDefaultFn ? undefined : column.default,\n // isFunctionDefault guarantees one of the two allowlisted functions; the\n // canonicalDefinitionSchema parse below re-checks the enum.\n defaultFn: isDefaultFn ? column.default : undefined,\n description: column.description,\n renamedFrom: column.renamed_from,\n cast: column.cast,\n deprecated: column.deprecated === true,\n }\n}\n\nfunction convertLink(table: string, name: string, link: NonNullable<TableFile['links']>[string]) {\n if (link.to.includes('.')) {\n throw new OrmDefinitionError(\n `link '${name}' on '${table}' targets '${link.to}' — cross-namespace links have no canonical v2 representation (links are namespace-local in v2)`,\n )\n }\n // v1 links always join `on` against the target's primary key, so\n // `references` stays unset (v2 defaults it to the target PK).\n return {\n name,\n kind: 'toOne' as const,\n target: link.to,\n on: link.on,\n enforce: link.enforce === true,\n description: link.description,\n }\n}\n\nfunction convertAction(table: string, name: string, action: ActionDefinition) {\n return {\n name,\n requires: action.requires?.source,\n params: Object.fromEntries(\n Object.entries(action.params ?? {}).map(([param, definition]) => [\n param,\n { type: definition.type, nullable: definition.optional === true },\n ]),\n ),\n // The v2 contract carries one SQL string; statement boundaries survive as\n // `;\\n` (v1 validation guarantees no bare `;` inside a single statement).\n executes: actionStatementSources(action.executes).join(';\\n'),\n // v1 declared the RETURNING columns inline; v2 types them at compile time,\n // so the shape collapses to rows-vs-rowsAffected.\n returns: action.returns ? ('rows' as const) : ('rowsAffected' as const),\n audit: action.audit ? { action: action.audit.action, resource: action.audit.resource ?? table } : undefined,\n }\n}\n","import type { CompiledStatement, NamespaceSnapshot, PlannedMigration } from '../engine/index.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { checksumOf, migrationName, type JournalEntry } from './workspace.js'\n\n/**\n * Rebase support for the v1 → v2 migration path (`orm diff --rebase`).\n *\n * Converting a namespace from YAML to canonical v2 changes its CONTENT HASH\n * (a different canonical serialization hashes differently) while changing\n * nothing in the database. The journal chains on content hashes, so without\n * a bridge entry every v2 diff would fail the previous-hash check. A rebase\n * entry is that bridge: a committed, checksummed journal entry whose\n * migration file carries ZERO statements — it records the discontinuity and\n * re-anchors the snapshot chain, nothing else.\n *\n * The caller's flow: convert (from-yaml.ts) → planMigrationV2 against the\n * committed tip snapshot → verifyRebaseIsNoop(plan) → buildRebaseJournalEntry\n * → write the three files (sql, snapshot, journal) like writeMigration does.\n */\n\nconst SHA256_HEX = /^[0-9a-f]{64}$/\n\n/** Statement kinds that disqualify a plan from being a rebase no-op. */\nexport interface RebaseNoopOptions {\n /**\n * v1 planned a drop-and-recreate of the RLS policies on every migration, so\n * a plan produced by the V1 PIPELINE against an unchanged schema still\n * carries `security` statements. v2 plans never emit them. Default false:\n * a rebase verified through planMigrationV2 must be empty outright.\n */\n readonly allowSecurityReemission?: boolean\n}\n\n/** The statements that stop a plan from qualifying as a rebase no-op. */\nexport function rebaseViolations(\n statements: readonly CompiledStatement[],\n options?: RebaseNoopOptions,\n): CompiledStatement[] {\n const allowSecurity = options?.allowSecurityReemission ?? false\n return statements.filter((statement) => !(statement.kind === 'security' && allowSecurity))\n}\n\n/**\n * True when the plan changes nothing: no DDL, no hint (rename/cast) ALTERs,\n * no action functions — and, unless explicitly allowed, no security\n * re-emission either. Pure predicate over the plan's statements.\n */\nexport const verifyRebaseIsNoop = (\n plan: Pick<PlannedMigration, 'statements'>,\n options?: RebaseNoopOptions,\n): boolean => rebaseViolations(plan.statements, options).length === 0\n\nexport interface RebaseEntryInput {\n readonly namespace: string\n /** Content hash at the committed journal tip (the v1 hash being rebased from). */\n readonly previousHash: string\n /** Content hash of the converted canonical v2 definition. */\n readonly newHash: string\n /** Journal tip ordinal + 1. A rebase always sits on an existing tip. */\n readonly ordinal: number\n /**\n * The verified no-op plan's snapshot. Structurally identical to the tip\n * snapshot but re-chained (fresh `id`, `prevId` = tip snapshot's id) so the\n * `--check` snapshot-chain walk stays unbroken through the rebase.\n */\n readonly snapshot: NamespaceSnapshot\n}\n\nexport interface RebaseEntry {\n readonly name: string\n /** Journal entry matching workspace.ts's journalEntrySchema exactly. */\n readonly entry: JournalEntry\n /** `migrations/<name>.sql` contents — header only, zero statements. */\n readonly sql: string\n /** `migrations/meta/NNNN.snapshot.json` contents (writeMigration's serialization). */\n readonly snapshotText: string\n}\n\n/**\n * Build the no-op journal entry (+ the exact file contents its checksums\n * commit to) recording a v1 → v2 content-hash rebase. Everything is\n * deterministic from the inputs, so `--check`-style gates can regenerate and\n * byte-compare it just like ordinary migrations.\n */\nexport function buildRebaseJournalEntry({ namespace, previousHash, newHash, ordinal, snapshot }: RebaseEntryInput): RebaseEntry {\n if (!SHA256_HEX.test(previousHash)) {\n throw new OrmDefinitionError(`rebase previousHash is not a sha256 hex digest: '${previousHash}'`)\n }\n if (!SHA256_HEX.test(newHash)) {\n throw new OrmDefinitionError(`rebase newHash is not a sha256 hex digest: '${newHash}'`)\n }\n if (previousHash === newHash) {\n throw new OrmDefinitionError('rebase previousHash and newHash are identical — nothing to rebase')\n }\n if (!Number.isInteger(ordinal) || ordinal < 2) {\n throw new OrmDefinitionError(`rebase ordinal must be an integer ≥ 2 (a rebase sits on an existing journal tip); got ${ordinal}`)\n }\n\n const name = migrationName(ordinal, newHash)\n const sql = renderRebaseMigrationSql({ name, namespace, previousHash, newHash })\n const snapshotText = `${JSON.stringify(snapshot, null, 2)}\\n`\n\n const entry: JournalEntry = {\n ordinal,\n name,\n content_hash: newHash,\n previous_content_hash: previousHash,\n checksum: checksumOf(sql),\n snapshot_checksum: checksumOf(snapshotText),\n destructive: false,\n }\n return { name, entry, sql, snapshotText }\n}\n\n/** Header-only migration file — the rebase's reviewable artifact. Modeled on workspace.ts renderMigrationSql. */\nfunction renderRebaseMigrationSql({\n name,\n namespace,\n previousHash,\n newHash,\n}: {\n name: string\n namespace: string\n previousHash: string\n newHash: string\n}): string {\n return (\n [\n `-- ${name}`,\n `-- namespace: ${namespace}`,\n `-- content hash: ${newHash}`,\n `-- rebase: v1 definitions (${previousHash}) converted to canonical v2 — verified no-op, zero statements`,\n '-- generated by `seq-studio orm diff --rebase` — review and commit, do not edit',\n ].join('\\n') + '\\n'\n )\n}\n","import { OrmDefinitionError } from '../errors.js'\nimport { namespaceConfigSchema } from './namespace-config.js'\nimport { buildNamespaceDefinition, type NamespaceDefinition } from './namespace.js'\nimport { tableFileSchema } from './table.js'\n\ninterface CanonicalShape {\n readonly namespace: unknown\n readonly description: string | null\n readonly capabilities: unknown\n readonly tables: readonly Record<string, unknown>[]\n}\n\n/**\n * Rehydrate a stored canonical definition (see hash.ts) back into a validated\n * NamespaceDefinition — predicates re-parse from their source strings, every\n * invariant re-checks. The registry is never trusted blindly: callers compare\n * computeDefinitionHash(result) against the stored content hash.\n */\nexport function parseCanonicalDefinition(value: unknown): NamespaceDefinition {\n const canonical = asCanonicalShape(value)\n const files = canonical.tables.map((table, index) => {\n const input = {\n namespace: canonical.namespace,\n table: table['table'],\n description: table['description'] ?? undefined,\n columns: table['columns'] ?? undefined,\n source: table['source'] ?? undefined,\n links: table['links'] ?? undefined,\n indexes: table['indexes'] ?? undefined,\n policies: canonicalPolicies(table['policies']),\n actions: canonicalActions(table['actions']),\n }\n const parsed = tableFileSchema.safeParse(input)\n if (!parsed.success) {\n const issue = parsed.error.issues[0]\n throw new OrmDefinitionError(\n `stored definition for table ${String(table['table'])} is invalid: ${issue?.message ?? 'unknown issue'}`,\n `canonical[${index}]`,\n )\n }\n return { file: `canonical[${index}]`, table: parsed.data }\n })\n // Re-validate the namespace config through its schema (capabilities block\n // included) — the registry is never trusted blindly; the block's superRefine\n // (cycles, unknown grants) re-runs exactly as it did at authoring.\n const config = namespaceConfigSchema.safeParse({\n namespace: canonical.namespace,\n description: canonical.description ?? undefined,\n capabilities: canonical.capabilities ?? undefined,\n })\n if (!config.success) {\n const issue = config.error.issues[0]\n throw new OrmDefinitionError(`stored namespace config is invalid: ${issue?.message ?? 'unknown issue'}`, 'canonical')\n }\n return buildNamespaceDefinition(files, config.data)\n}\n\nfunction asCanonicalShape(value: unknown): CanonicalShape {\n if (value === null || typeof value !== 'object' || Array.isArray(value)) {\n throw new OrmDefinitionError('stored definition is not an object')\n }\n const record = value as Record<string, unknown>\n if (typeof record['namespace'] !== 'string' || !Array.isArray(record['tables'])) {\n throw new OrmDefinitionError('stored definition is missing namespace/tables')\n }\n return {\n namespace: record['namespace'],\n // Pre-capabilities rows lack both fields — rehydrate as unset.\n description: typeof record['description'] === 'string' ? record['description'] : null,\n capabilities: record['capabilities'] ?? undefined,\n tables: record['tables'] as Record<string, unknown>[],\n }\n}\n\nfunction canonicalPolicies(value: unknown): Record<string, unknown> | undefined {\n if (value === null || typeof value !== 'object') return undefined\n const record = value as Record<string, unknown>\n const policies: Record<string, unknown> = {}\n if (typeof record['read'] === 'string') policies['read'] = record['read']\n if (typeof record['write'] === 'string') policies['write'] = record['write']\n return Object.keys(policies).length > 0 ? policies : undefined\n}\n\nfunction canonicalActions(value: unknown): Record<string, unknown> | undefined {\n if (value === null || typeof value !== 'object') return undefined\n const entries = Object.entries(value as Record<string, Record<string, unknown>>)\n if (entries.length === 0) return undefined\n return Object.fromEntries(\n entries.map(([name, action]) => [\n name,\n {\n description: action['description'] ?? undefined,\n requires: action['requires'] ?? undefined,\n params: action['params'] ?? undefined,\n validates: action['validates'] ?? undefined,\n executes: action['executes'],\n returns: action['returns'] ?? undefined,\n audit: action['audit'] ?? undefined,\n },\n ]),\n )\n}\n"]}
|