jtcsv 2.2.8 → 3.1.0
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 +204 -115
- package/bin/jtcsv.ts +2612 -0
- package/browser.d.ts +142 -0
- package/dist/benchmark.js +446 -0
- package/dist/benchmark.js.map +1 -0
- package/dist/bin/jtcsv.js +1940 -0
- package/dist/bin/jtcsv.js.map +1 -0
- package/dist/csv-to-json.js +1262 -0
- package/dist/csv-to-json.js.map +1 -0
- package/dist/errors.js +291 -0
- package/dist/errors.js.map +1 -0
- package/dist/eslint.config.js +147 -0
- package/dist/eslint.config.js.map +1 -0
- package/dist/index-core.js +95 -0
- package/dist/index-core.js.map +1 -0
- package/dist/index.js +93 -0
- package/dist/index.js.map +1 -0
- package/dist/json-save.js +229 -0
- package/dist/json-save.js.map +1 -0
- package/dist/json-to-csv.js +576 -0
- package/dist/json-to-csv.js.map +1 -0
- package/dist/jtcsv-core.cjs.js +1736 -0
- package/dist/jtcsv-core.cjs.js.map +1 -0
- package/dist/jtcsv-core.esm.js +1708 -0
- package/dist/jtcsv-core.esm.js.map +1 -0
- package/dist/jtcsv-core.umd.js +1742 -0
- package/dist/jtcsv-core.umd.js.map +1 -0
- package/dist/jtcsv-full.cjs.js +2241 -0
- package/dist/jtcsv-full.cjs.js.map +1 -0
- package/dist/jtcsv-full.esm.js +2209 -0
- package/dist/jtcsv-full.esm.js.map +1 -0
- package/dist/jtcsv-full.umd.js +2247 -0
- package/dist/jtcsv-full.umd.js.map +1 -0
- package/dist/jtcsv-workers.esm.js +768 -0
- package/dist/jtcsv-workers.esm.js.map +1 -0
- package/dist/jtcsv-workers.umd.js +782 -0
- package/dist/jtcsv-workers.umd.js.map +1 -0
- package/dist/jtcsv.cjs.js +1996 -2048
- package/dist/jtcsv.cjs.js.map +1 -1
- package/dist/jtcsv.esm.js +1992 -2048
- package/dist/jtcsv.esm.js.map +1 -1
- package/dist/jtcsv.umd.js +2157 -2209
- package/dist/jtcsv.umd.js.map +1 -1
- package/dist/plugins/express-middleware/index.js +350 -0
- package/dist/plugins/express-middleware/index.js.map +1 -0
- package/dist/plugins/fastify-plugin/index.js +315 -0
- package/dist/plugins/fastify-plugin/index.js.map +1 -0
- package/dist/plugins/hono/index.js +111 -0
- package/dist/plugins/hono/index.js.map +1 -0
- package/dist/plugins/nestjs/index.js +112 -0
- package/dist/plugins/nestjs/index.js.map +1 -0
- package/dist/plugins/nuxt/index.js +53 -0
- package/dist/plugins/nuxt/index.js.map +1 -0
- package/dist/plugins/remix/index.js +133 -0
- package/dist/plugins/remix/index.js.map +1 -0
- package/dist/plugins/sveltekit/index.js +155 -0
- package/dist/plugins/sveltekit/index.js.map +1 -0
- package/dist/plugins/trpc/index.js +136 -0
- package/dist/plugins/trpc/index.js.map +1 -0
- package/dist/run-demo.js +49 -0
- package/dist/run-demo.js.map +1 -0
- package/dist/src/browser/browser-functions.js +193 -0
- package/dist/src/browser/browser-functions.js.map +1 -0
- package/dist/src/browser/core.js +123 -0
- package/dist/src/browser/core.js.map +1 -0
- package/dist/src/browser/csv-to-json-browser.js +353 -0
- package/dist/src/browser/csv-to-json-browser.js.map +1 -0
- package/dist/src/browser/errors-browser.js +219 -0
- package/dist/src/browser/errors-browser.js.map +1 -0
- package/dist/src/browser/extensions/plugins.js +106 -0
- package/dist/src/browser/extensions/plugins.js.map +1 -0
- package/dist/src/browser/extensions/workers.js +66 -0
- package/dist/src/browser/extensions/workers.js.map +1 -0
- package/dist/src/browser/index.js +140 -0
- package/dist/src/browser/index.js.map +1 -0
- package/dist/src/browser/json-to-csv-browser.js +225 -0
- package/dist/src/browser/json-to-csv-browser.js.map +1 -0
- package/dist/src/browser/streams.js +340 -0
- package/dist/src/browser/streams.js.map +1 -0
- package/dist/src/browser/workers/csv-parser.worker.js +264 -0
- package/dist/src/browser/workers/csv-parser.worker.js.map +1 -0
- package/dist/src/browser/workers/worker-pool.js +338 -0
- package/dist/src/browser/workers/worker-pool.js.map +1 -0
- package/dist/src/core/delimiter-cache.js +196 -0
- package/dist/src/core/delimiter-cache.js.map +1 -0
- package/dist/src/core/node-optimizations.js +279 -0
- package/dist/src/core/node-optimizations.js.map +1 -0
- package/dist/src/core/plugin-system.js +399 -0
- package/dist/src/core/plugin-system.js.map +1 -0
- package/dist/src/core/transform-hooks.js +348 -0
- package/dist/src/core/transform-hooks.js.map +1 -0
- package/dist/src/engines/fast-path-engine-new.js +262 -0
- package/dist/src/engines/fast-path-engine-new.js.map +1 -0
- package/dist/src/engines/fast-path-engine.js +671 -0
- package/dist/src/engines/fast-path-engine.js.map +1 -0
- package/dist/src/errors.js +18 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/formats/ndjson-parser.js +332 -0
- package/dist/src/formats/ndjson-parser.js.map +1 -0
- package/dist/src/formats/tsv-parser.js +230 -0
- package/dist/src/formats/tsv-parser.js.map +1 -0
- package/dist/src/index-with-plugins.js +259 -0
- package/dist/src/index-with-plugins.js.map +1 -0
- package/dist/src/types/index.js +3 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/src/utils/bom-utils.js +267 -0
- package/dist/src/utils/bom-utils.js.map +1 -0
- package/dist/src/utils/encoding-support.js +77 -0
- package/dist/src/utils/encoding-support.js.map +1 -0
- package/dist/src/utils/schema-validator.js +609 -0
- package/dist/src/utils/schema-validator.js.map +1 -0
- package/dist/src/utils/transform-loader.js +281 -0
- package/dist/src/utils/transform-loader.js.map +1 -0
- package/dist/src/utils/validators.js +40 -0
- package/dist/src/utils/validators.js.map +1 -0
- package/dist/src/utils/zod-adapter.js +144 -0
- package/dist/src/utils/zod-adapter.js.map +1 -0
- package/dist/src/web-server/index.js +648 -0
- package/dist/src/web-server/index.js.map +1 -0
- package/dist/src/workers/csv-multithreaded.js +211 -0
- package/dist/src/workers/csv-multithreaded.js.map +1 -0
- package/dist/src/workers/csv-parser.worker.js +179 -0
- package/dist/src/workers/csv-parser.worker.js.map +1 -0
- package/dist/src/workers/worker-pool.js +228 -0
- package/dist/src/workers/worker-pool.js.map +1 -0
- package/dist/stream-csv-to-json.js +665 -0
- package/dist/stream-csv-to-json.js.map +1 -0
- package/dist/stream-json-to-csv.js +389 -0
- package/dist/stream-json-to-csv.js.map +1 -0
- package/examples/advanced/conditional-transformations.ts +446 -0
- package/examples/advanced/csv-parser.worker.ts +89 -0
- package/examples/advanced/nested-objects-example.ts +306 -0
- package/examples/advanced/performance-optimization.ts +504 -0
- package/examples/advanced/run-demo-server.ts +116 -0
- package/examples/advanced/web-worker-usage.html +874 -0
- package/examples/async-multithreaded-example.ts +335 -0
- package/examples/cli-advanced-usage.md +290 -0
- package/examples/{cli-batch-processing.js → cli-batch-processing.ts} +38 -38
- package/examples/{cli-tool.js → cli-tool.ts} +5 -8
- package/examples/{error-handling.js → error-handling.ts} +356 -324
- package/examples/{express-api.js → express-api.ts} +161 -164
- package/examples/{large-dataset-example.js → large-dataset-example.ts} +201 -182
- package/examples/{ndjson-processing.js → ndjson-processing.ts} +456 -434
- package/examples/{plugin-excel-exporter.js → plugin-excel-exporter.ts} +6 -7
- package/examples/react-integration.tsx +637 -0
- package/examples/{schema-validation.js → schema-validation.ts} +2 -2
- package/examples/simple-usage.ts +194 -0
- package/examples/{streaming-example.js → streaming-example.ts} +12 -12
- package/index.d.ts +187 -18
- package/package.json +75 -81
- package/plugins.d.ts +37 -0
- package/schema.d.ts +103 -0
- package/src/browser/browser-functions.ts +402 -0
- package/src/browser/core.ts +152 -0
- package/src/browser/csv-to-json-browser.d.ts +3 -0
- package/src/browser/csv-to-json-browser.ts +494 -0
- package/src/browser/{errors-browser.js → errors-browser.ts} +305 -197
- package/src/browser/extensions/plugins.ts +93 -0
- package/src/browser/extensions/workers.ts +39 -0
- package/src/browser/globals.d.ts +5 -0
- package/src/browser/index.ts +192 -0
- package/src/browser/json-to-csv-browser.d.ts +3 -0
- package/src/browser/json-to-csv-browser.ts +338 -0
- package/src/browser/streams.ts +403 -0
- package/src/browser/workers/{csv-parser.worker.js → csv-parser.worker.ts} +3 -3
- package/src/browser/workers/{worker-pool.js → worker-pool.ts} +51 -30
- package/src/core/delimiter-cache.ts +320 -0
- package/src/core/{node-optimizations.js → node-optimizations.ts} +448 -407
- package/src/core/plugin-system.ts +588 -0
- package/src/core/transform-hooks.ts +566 -0
- package/src/engines/{fast-path-engine-new.js → fast-path-engine-new.ts} +11 -2
- package/src/engines/{fast-path-engine.js → fast-path-engine.ts} +79 -53
- package/src/errors.ts +1 -0
- package/src/formats/{ndjson-parser.js → ndjson-parser.ts} +24 -16
- package/src/formats/{tsv-parser.js → tsv-parser.ts} +18 -17
- package/src/{index-with-plugins.js → index-with-plugins.ts} +381 -357
- package/src/types/index.ts +275 -0
- package/src/utils/bom-utils.ts +373 -0
- package/src/utils/encoding-support.ts +155 -0
- package/src/utils/{schema-validator.js → schema-validator.ts} +814 -589
- package/src/utils/transform-loader.ts +389 -0
- package/src/utils/validators.ts +35 -0
- package/src/utils/zod-adapter.ts +280 -0
- package/src/web-server/{index.js → index.ts} +19 -19
- package/src/workers/csv-multithreaded.ts +310 -0
- package/src/workers/csv-parser.worker.ts +227 -0
- package/src/workers/worker-pool.ts +409 -0
- package/bin/jtcsv.js +0 -2462
- package/csv-to-json.js +0 -688
- package/errors.js +0 -208
- package/examples/simple-usage.js +0 -282
- package/index.js +0 -68
- package/json-save.js +0 -254
- package/json-to-csv.js +0 -526
- package/plugins/README.md +0 -91
- package/plugins/express-middleware/README.md +0 -64
- package/plugins/express-middleware/example.js +0 -136
- package/plugins/express-middleware/index.d.ts +0 -114
- package/plugins/express-middleware/index.js +0 -360
- package/plugins/express-middleware/package.json +0 -52
- package/plugins/fastify-plugin/index.js +0 -406
- package/plugins/fastify-plugin/package.json +0 -55
- package/plugins/hono/README.md +0 -28
- package/plugins/hono/index.d.ts +0 -12
- package/plugins/hono/index.js +0 -36
- package/plugins/hono/package.json +0 -35
- package/plugins/nestjs/README.md +0 -35
- package/plugins/nestjs/index.d.ts +0 -25
- package/plugins/nestjs/index.js +0 -77
- package/plugins/nestjs/package.json +0 -37
- package/plugins/nextjs-api/README.md +0 -57
- package/plugins/nextjs-api/examples/ConverterComponent.jsx +0 -386
- package/plugins/nextjs-api/examples/api-convert.js +0 -69
- package/plugins/nextjs-api/index.js +0 -387
- package/plugins/nextjs-api/package.json +0 -63
- package/plugins/nextjs-api/route.js +0 -371
- package/plugins/nuxt/README.md +0 -24
- package/plugins/nuxt/index.js +0 -21
- package/plugins/nuxt/package.json +0 -35
- package/plugins/nuxt/runtime/composables/useJtcsv.js +0 -6
- package/plugins/nuxt/runtime/plugin.js +0 -6
- package/plugins/remix/README.md +0 -26
- package/plugins/remix/index.d.ts +0 -16
- package/plugins/remix/index.js +0 -62
- package/plugins/remix/package.json +0 -35
- package/plugins/sveltekit/README.md +0 -28
- package/plugins/sveltekit/index.d.ts +0 -17
- package/plugins/sveltekit/index.js +0 -54
- package/plugins/sveltekit/package.json +0 -33
- package/plugins/trpc/README.md +0 -25
- package/plugins/trpc/index.d.ts +0 -7
- package/plugins/trpc/index.js +0 -32
- package/plugins/trpc/package.json +0 -34
- package/src/browser/browser-functions.js +0 -219
- package/src/browser/csv-to-json-browser.js +0 -700
- package/src/browser/index.js +0 -113
- package/src/browser/json-to-csv-browser.js +0 -309
- package/src/browser/streams.js +0 -393
- package/src/core/delimiter-cache.js +0 -186
- package/src/core/plugin-system.js +0 -476
- package/src/core/transform-hooks.js +0 -350
- package/src/errors.js +0 -26
- package/src/utils/transform-loader.js +0 -205
- package/stream-csv-to-json.js +0 -542
- package/stream-json-to-csv.js +0 -464
- /package/examples/{web-workers-advanced.js → web-workers-advanced.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jtcsv.js","sourceRoot":"","sources":["../../bin/jtcsv.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,uCAAyB;AACzB,2CAA6B;AAC7B,mDAAqC;AACrC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAChD,gDAAkC;AAClC,MAAM,eAAe,GAAG,OAAO,CAAC,+BAA+B,CAAC,CAAC;AACjE,MAAM,eAAe,GAAG,OAAO,CAAC,+BAA+B,CAAC,CAAC;AAEjE,MAAM,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC;AA4BnD,KAAK,UAAU,cAAc,CAAC,IAAI,EAAE,aAAkB;IACpD,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,CAAC,CAAC;QACjE,MAAM,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;QAG/C,IAAI,OAAO,eAAe,KAAK,UAAU,EAAE,CAAC;YAC1C,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;aAAM,IAAI,OAAO,eAAe,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;YACzD,OAAO,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;aAAM,IAAI,OAAO,eAAe,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;YAC3D,OAAO,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CACb,iDAAiD,OAAO,eAAe,EAAE,CAC1E,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,kCAAkC,aAAa,KAAK,KAAK,CAAC,OAAO,EAAE,CACpE,CAAC;IACJ,CAAC;AACH,CAAC;AAGD,MAAM,MAAM,GAAG;IACb,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,SAAS;IACjB,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,UAAU;IACf,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,UAAU;IAClB,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,UAAU;IACnB,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,UAAU;CAClB,CAAC;AAEF,SAAS,KAAK,CAAC,IAAI,EAAE,SAAc;IACjC,OAAQ,MAAc,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC;AAC1D,CAAC;AAED,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC;EACZ,KAAK,CAAC,aAAa,GAAG,OAAO,EAAE,MAAM,CAAC;EACtC,KAAK,CAAC,+CAA+C,EAAE,KAAK,CAAC;;EAE7D,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;;;EAGzB,KAAK,CAAC,gBAAgB,EAAE,QAAQ,CAAC;IAC/B,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC;IAC7B,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC;IAC7B,KAAK,CAAC,eAAe,EAAE,OAAO,CAAC;IAC/B,KAAK,CAAC,eAAe,EAAE,OAAO,CAAC;IAC/B,KAAK,CAAC,gBAAgB,EAAE,OAAO,CAAC;IAChC,KAAK,CAAC,gBAAgB,EAAE,OAAO,CAAC;IAChC,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC;IAC5B,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC;IAC3B,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACzB,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC;IACxB,KAAK,CAAC,YAAY,EAAE,SAAS,CAAC;IAC9B,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC1B,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC;IACvB,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC;IACvB,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;;EAE1B,KAAK,CAAC,wBAAwB,EAAE,QAAQ,CAAC;IACvC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC;IAClC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC;IAClC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC;IAClC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC;;EAErC,KAAK,CAAC,oBAAoB,EAAE,QAAQ,CAAC;IACnC,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC;IACjC,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC;IACjC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC;;EAE/B,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC;IAC1B,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC;;;IAGzC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC;;;IAGzC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC;;;IAGvC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC;;;IAGtC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC;;;IAG9C,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC;;;IAGxC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC;;;IAGxC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC;;;IAGzC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC;;;IAGrC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC;;;EAGvC,KAAK,CAAC,qBAAqB,EAAE,QAAQ,CAAC;IACpC,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC;IAC7B,KAAK,CAAC,eAAe,EAAE,MAAM,CAAC;IAC9B,KAAK,CAAC,eAAe,EAAE,MAAM,CAAC;IAC9B,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC;IAC7B,KAAK,CAAC,iBAAiB,EAAE,MAAM,CAAC;IAChC,KAAK,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACjC,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAC/B,KAAK,CAAC,mBAAmB,EAAE,MAAM,CAAC;IAClC,KAAK,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACpC,KAAK,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACnC,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC;IAC5B,KAAK,CAAC,2BAA2B,EAAE,MAAM,CAAC;IAC1C,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC;IAC7B,KAAK,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAC/B,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC;IAC5B,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC;IAC7B,KAAK,CAAC,qBAAqB,EAAE,QAAQ,CAAC;IACtC,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC;IAC7B,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACrC,KAAK,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACrC,KAAK,CAAC,mBAAmB,EAAE,MAAM,CAAC;IAClC,KAAK,CAAC,iBAAiB,EAAE,MAAM,CAAC;IAChC,KAAK,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACpC,KAAK,CAAC,oBAAoB,EAAE,QAAQ,CAAC;IACrC,KAAK,CAAC,eAAe,EAAE,MAAM,CAAC;IAC9B,KAAK,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAC/B,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,gBAAgB,EAAE,QAAQ,CAAC;IACjC,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC;IAC5B,KAAK,CAAC,YAAY,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,eAAe,EAAE,MAAM,CAAC;IAC9B,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC;IAC5B,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC;IAC5B,KAAK,CAAC,kBAAkB,EAAE,QAAQ,CAAC;IACnC,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,oBAAoB,EAAE,QAAQ,CAAC;;;;;;;IAOrC,KAAK,CAAC,uBAAuB,EAAE,QAAQ,CAAC;;;;;;IAMxC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC;;;;GAI5B,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW;IAClB,OAAO,CAAC,GAAG,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,KAAK,UAAU,SAAS;IACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YACjC,IAAI,IAAI,KAAK,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC;AAMD,KAAK,UAAU,gBAAgB,CAAC,SAAS,EAAE,UAAU,EAAE,OAAY;IACjE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,SAAS,KAAK,GAAG,CAAC;IACnC,MAAM,SAAS,GAAG,UAAU,KAAK,GAAG,CAAC;IACrC,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC;IAEhD,IAAI,CAAC;QAEH,MAAM,SAAS,GAAG,QAAQ;YACxB,CAAC,CAAC,MAAM,SAAS,EAAE;YACnB,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAEvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CACT,KAAK,CACH,cAAc,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,aAAa,EAC3D,KAAK,CACN,CACF,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,4BAA4B,OAAO,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC,CAC9D,CAAC;YACJ,CAAC;YACD,IAAI,eAAe,CAAC;YAC1B,IAAI,CAAC;gBACG,eAAe,GAAG,eAAe,CAAC,cAAc,CAC9C,QAAQ,EACR,OAAO,CAAC,SAAS,CAClB,CAAC;gBACF,IAAI,SAAS,EAAE,CAAC;oBACd,OAAO,CAAC,GAAG,CACT,KAAK,CACH,0BAA0B,eAAe,CAAC,MAAM,UAAU,EAC1D,OAAO,CACR,CACF,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,OAAO,cAAmB,EAAE,CAAC;gBAC7B,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,sBAAsB,cAAc,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAC7D,CAAC;gBACF,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;oBAClB,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;gBACtC,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAGD,MAAM,YAAY,GAAG;YACnB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;YAChD,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC1C,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC1C,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,aAAa,EAAE,OAAO,CAAC,aAAa;SACrC,CAAC;QAGF,IAAI,eAAe,GAAG,QAAQ,CAAC;QAC/B,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,eAAe,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QACtE,CAAC;QAGD,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;QAG/D,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACvC,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CACT,KAAK,CACH,eAAe,eAAe,CAAC,MAAM,CAAC,cAAc,EAAE,eAAe,OAAO,IAAI,EAChF,OAAO,CACR,CACF,CAAC;YACF,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CACT,KAAK,CACH,aAAa,UAAU,KAAK,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,SAAS,EACpE,KAAK,CACN,CACF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO;YACL,OAAO,EAAE,eAAe,CAAC,MAAM;YAC/B,KAAK,EAAE,OAAO,CAAC,MAAM;YACrB,IAAI,EAAE,OAAO;SACd,CAAC;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,SAAS,EAAE,UAAU,EAAE,OAAY;IACjE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,SAAS,KAAK,GAAG,CAAC;IACnC,MAAM,SAAS,GAAG,UAAU,KAAK,GAAG,CAAC;IACrC,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC;IAEhD,IAAI,CAAC;QACH,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC,CAAC;QACnD,CAAC;QAGD,MAAM,YAAY,GAAG;YACnB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC;QAGF,IAAI,QAAa,CAAC;QAClB,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,UAAU,GAAG,MAAM,SAAS,EAAE,CAAC;YACrC,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAChE,CAAC;QAGD,IAAI,eAAe,GAAG,QAAQ,CAAC;QAC/B,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,4BAA4B,OAAO,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC,CAC9D,CAAC;YACJ,CAAC;YACD,IAAI,CAAC;gBACH,eAAe,GAAG,eAAe,CAAC,cAAc,CAC9C,QAAQ,EACR,OAAO,CAAC,SAAS,CAClB,CAAC;gBACF,IAAI,SAAS,EAAE,CAAC;oBACd,OAAO,CAAC,GAAG,CACT,KAAK,CACH,0BAA0B,eAAe,CAAC,MAAM,OAAO,EACvD,OAAO,CACR,CACF,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,OAAO,cAAmB,EAAE,CAAC;gBAC7B,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,sBAAsB,cAAc,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAC7D,CAAC;gBACF,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;oBAClB,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;gBACtC,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAGD,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM;YAC/B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1C,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAGpC,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACvC,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CACT,KAAK,CACH,eAAe,eAAe,CAAC,MAAM,CAAC,cAAc,EAAE,YAAY,OAAO,IAAI,EAC7E,OAAO,CACR,CACF,CAAC;YACF,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CACT,KAAK,CACH,aAAa,UAAU,KAAK,UAAU,CAAC,MAAM,CAAC,cAAc,EAAE,SAAS,EACvE,KAAK,CACN,CACF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO;YACL,IAAI,EAAE,eAAe,CAAC,MAAM;YAC5B,KAAK,EAAE,UAAU,CAAC,MAAM;YACxB,IAAI,EAAE,OAAO;SACd,CAAC;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,SAAS,EAAE,UAAU,EAAE,OAAY;IAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QAEH,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAEhE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC,CAAC;QAClD,CAAC;QAGD,IAAI,eAAe,GAAG,SAAS,CAAC;QAChC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,4BAA4B,OAAO,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC,CAC9D,CAAC;YACJ,CAAC;YACD,IAAI,CAAC;gBAEH,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE;oBAC5C,SAAS,EAAE,OAAO,CAAC,SAAS;oBAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;oBAC9B,UAAU,EAAE,OAAO,CAAC,UAAU;oBAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,YAAY,EAAE,OAAO,CAAC,YAAY;oBAClC,aAAa,EAAE,OAAO,CAAC,aAAa;oBACpC,eAAe,EAAE,OAAO,CAAC,eAAe;oBACxC,eAAe,EAAE,OAAO,CAAC,eAAe;iBACzC,CAAC,CAAC;gBAEH,MAAM,eAAe,GAAG,eAAe,CAAC,cAAc,CACpD,UAAU,EACV,OAAO,CAAC,SAAS,CAClB,CAAC;gBAGF,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC,eAAe,EAAE;oBACjD,SAAS,EAAE,OAAO,CAAC,SAAS;oBAC5B,cAAc,EAAE,OAAO,CAAC,cAAc;oBACtC,eAAe,EAAE,OAAO,CAAC,eAAe;iBACzC,CAAC,CAAC;gBAEH,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;oBACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC;YAAC,OAAO,cAAmB,EAAE,CAAC;gBAC7B,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,sBAAsB,cAAc,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAC7D,CAAC;gBACF,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;oBAClB,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;gBACtC,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAGD,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;QAEjE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACvC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,OAAO,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QACvD,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,SAAS,EAAE,UAAU,EAAE,OAAY;IAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QAEH,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAEvC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CACT,KAAK,CACH,UAAU,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,KAAK,EACjG,KAAK,CACN,CACF,CAAC;QACJ,CAAC;QAGD,IAAI,eAAe,GAAG,QAAQ,CAAC;QAC/B,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,4BAA4B,OAAO,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC,CAC9D,CAAC;YACJ,CAAC;YACD,IAAI,CAAC;gBACH,eAAe,GAAG,eAAe,CAAC,cAAc,CAC9C,QAAQ,EACR,OAAO,CAAC,SAAS,CAClB,CAAC;gBACF,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;oBACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC;YAAC,OAAO,cAAmB,EAAE,CAAC;gBAC7B,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,sBAAsB,cAAc,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAC7D,CAAC;gBACF,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;oBAClB,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;gBACtC,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAGD,MAAM,YAAY,GAAG;YACnB,WAAW,EAAE,OAAO,CAAC,MAAM;SAC5B,CAAC;QAGF,MAAM,KAAK,CAAC,UAAU,CAAC,eAAe,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;QAElE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACvC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,OAAO,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QACvD,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAMD,KAAK,UAAU,kBAAkB,CAAC,SAAS,EAAE,UAAU,EAAE,OAAY;IACnE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC,CAAC;QAC3D,CAAC;QAGD,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAE/C,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,UAAU,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,sBAAsB,EAAE,KAAK,CAAC,CAC/E,CAAC;QACJ,CAAC;QAGD,MAAM,YAAY,GAAG;YACnB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;YAChD,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC1C,eAAe,EAAE,OAAO,CAAC,eAAe;SACzC,CAAC;QAGF,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAGxD,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAEzD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACvC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CACT,KAAK,CACH,eAAe,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,eAAe,OAAO,IAAI,EACzE,OAAO,CACR,CACF,CAAC;YACF,OAAO,CAAC,GAAG,CACT,KAAK,CACH,aAAa,UAAU,KAAK,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,SAAS,EACpE,KAAK,CACN,CACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,QAAQ,CAAC,MAAM;YACxB,KAAK,EAAE,OAAO,CAAC,MAAM;YACrB,IAAI,EAAE,OAAO;SACd,CAAC;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,SAAS,EAAE,UAAU,EAAE,OAAY;IACnE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC,CAAC;QAC3D,CAAC;QAGD,MAAM,YAAY,GAAG;YACnB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,aAAa,EAAE,OAAO,CAAC,aAAa;SACrC,CAAC;QAGF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAGpE,MAAM,UAAU,GAAG,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAGhD,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QAE5D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACvC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CACT,KAAK,CACH,eAAe,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,YAAY,OAAO,IAAI,EACtE,OAAO,CACR,CACF,CAAC;YACF,OAAO,CAAC,GAAG,CACT,KAAK,CACH,aAAa,UAAU,KAAK,UAAU,CAAC,MAAM,CAAC,cAAc,EAAE,SAAS,EACvE,KAAK,CACN,CACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,IAAI,EAAE,QAAQ,CAAC,MAAM;YACrB,KAAK,EAAE,UAAU,CAAC,MAAM;YACxB,IAAI,EAAE,OAAO;SACd,CAAC;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,SAAS,EAAE,UAAU,EAAE,OAAY;IACpE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC,CAAC;QAClE,CAAC;QAGD,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAG/C,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM;YAC/B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACnC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAG7B,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QAE5D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACvC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CACT,KAAK,CACH,eAAe,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,eAAe,OAAO,IAAI,EACzE,OAAO,CACR,CACF,CAAC;YACF,OAAO,CAAC,GAAG,CACT,KAAK,CACH,aAAa,UAAU,KAAK,UAAU,CAAC,MAAM,CAAC,cAAc,EAAE,SAAS,EACvE,KAAK,CACN,CACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,QAAQ,CAAC,MAAM;YACxB,KAAK,EAAE,UAAU,CAAC,MAAM;YACxB,IAAI,EAAE,OAAO;SACd,CAAC;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,SAAS,EAAE,UAAU,EAAE,OAAY;IACpE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC,CAAC;QAClE,CAAC;QAGD,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAEvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QAGD,MAAM,UAAU,GAAG,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAGhD,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QAE5D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACvC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CACT,KAAK,CACH,eAAe,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,eAAe,OAAO,IAAI,EACzE,OAAO,CACR,CACF,CAAC;YACF,OAAO,CAAC,GAAG,CACT,KAAK,CACH,aAAa,UAAU,KAAK,UAAU,CAAC,MAAM,CAAC,cAAc,EAAE,SAAS,EACvE,KAAK,CACN,CACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,QAAQ,CAAC,MAAM;YACxB,KAAK,EAAE,UAAU,CAAC,MAAM;YACxB,IAAI,EAAE,OAAO;SACd,CAAC;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAMD,KAAK,UAAU,UAAU,CAAC,SAAS,EAAE,UAAU,EAAE,OAAY;IAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC,CAAC;QACpE,CAAC;QAGD,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAEvC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;QACxC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,IAAI,GAAG,CAAC;QAG/C,MAAM,aAAa,GAAG,CAAC,GAAQ,EAAE,MAAM,GAAG,EAAE,EAAE,KAAK,GAAG,CAAC,EAAO,EAAE;YAC9D,IAAI,KAAK,IAAI,QAAQ,EAAE,CAAC;gBACtB,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YACxD,CAAC;YAED,MAAM,MAAM,GAAG,EAAE,CAAC;YAElB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/C,MAAM,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;gBAE5B,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBAChE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC7E,CAAC;qBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBAEhC,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;wBACxB,MAAc,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC7C,CAAC;yBAAM,CAAC;wBACL,MAAc,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;oBAClD,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACL,MAAc,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;gBAClC,CAAC;YACH,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC,CAAA;QAED,IAAI,aAAa,CAAC;QAClB,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1D,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,cAAc,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,aAAa,EAAE,KAAK,CAAC,CAC1E,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,aAAa,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;QAGD,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM;YAC/B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YACxC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAGlC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QAE5D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACvC,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAE5E,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CACT,KAAK,CACH,eAAe,WAAW,CAAC,cAAc,EAAE,iBAAiB,OAAO,IAAI,EACvE,OAAO,CACR,CACF,CAAC;YACF,OAAO,CAAC,GAAG,CACT,KAAK,CACH,aAAa,UAAU,KAAK,UAAU,CAAC,MAAM,CAAC,cAAc,EAAE,SAAS,EACvE,KAAK,CACN,CACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,WAAW;YACpB,KAAK,EAAE,UAAU,CAAC,MAAM;YACxB,IAAI,EAAE,OAAO;SACd,CAAC;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,SAAS,EAAE,UAAU,EAAE,OAAY;IAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QAEH,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAEvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CACb,yDAAyD,CAC1D,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CACT,KAAK,CACH,iBAAiB,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,aAAa,EAC9D,KAAK,CACN,CACF,CAAC;QACJ,CAAC;QAGD,MAAM,aAAa,GAAG,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAGrD,IAAI,eAAe,GAAG,aAAa,CAAC;QACpC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,4BAA4B,OAAO,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC,CAC9D,CAAC;YACJ,CAAC;YACD,IAAI,CAAC;gBACH,eAAe,GAAG,eAAe,CAAC,cAAc,CAC9C,aAAa,EACb,OAAO,CAAC,SAAS,CAClB,CAAC;gBACF,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;oBACpB,OAAO,CAAC,GAAG,CACT,KAAK,CACH,0BAA0B,eAAe,CAAC,MAAM,UAAU,EAC1D,OAAO,CACR,CACF,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,OAAO,cAAmB,EAAE,CAAC;gBAC7B,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,sBAAsB,cAAc,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAC7D,CAAC;gBACF,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;oBAClB,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;gBACtC,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAGD,IAAI,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YACrD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;YACvC,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC/B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;oBACvB,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC;wBAC/C,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC1C,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAGD,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM;YAC/B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1C,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAGpC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QAE5D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACvC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CACT,KAAK,CACH,kBAAkB,eAAe,CAAC,MAAM,CAAC,cAAc,EAAE,eAAe,OAAO,IAAI,EACnF,OAAO,CACR,CACF,CAAC;YACF,OAAO,CAAC,GAAG,CACT,KAAK,CACH,aAAa,UAAU,KAAK,UAAU,CAAC,MAAM,CAAC,cAAc,EAAE,SAAS,EACvE,KAAK,CACN,CACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,eAAe,CAAC,MAAM;YAC/B,KAAK,EAAE,UAAU,CAAC,MAAM;YACxB,IAAI,EAAE,OAAO;SACd,CAAC;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAMD,KAAK,UAAU,eAAe,CAAC,SAAS,EAAE,UAAU,EAAE,OAAY;IAChE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,IAAI,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC,CAAC;QACxD,CAAC;QAGD,MAAM,UAAU,GAAG,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC1D,MAAM,WAAW,GAAG,EAAE,CAAC,iBAAiB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAG7D,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;QAGD,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,MAAM,YAAY,GAAG,IAAI,CAAC;QAC1B,IAAI,cAAc,GAAG,KAAK,CAAC;QAE3B,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC;YAGhB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;oBAChB,IAAI,CAAC;wBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBAE7B,IAAI,QAAQ,GAAG,GAAG,CAAC;wBACnB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;4BACtB,MAAM,SAAS,GAAG,OAAO,CAAC,SAAmC,CAAC;4BAC9D,QAAQ,GAAG,EAAE,CAAC;4BACd,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;gCACzD,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;oCACjB,QAAgB,CAAC,MAAM,CAAC,GAAI,GAAW,CAAC,MAAM,CAAC,CAAC;gCACnD,CAAC;4BACH,CAAC;4BAED,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gCAC/C,IAAI,CAAC,CAAC,GAAG,IAAI,SAAS,CAAC,EAAE,CAAC;oCACvB,QAAgB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gCACjC,CAAC;4BACH,CAAC;wBACH,CAAC;wBACD,WAAW,EAAE,CAAC;wBAGd,IAAI,CAAC,cAAc,IAAI,OAAO,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;4BACxD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;4BACtC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;4BACjE,cAAc,GAAG,IAAI,CAAC;wBACxB,CAAC;wBAGD,MAAM,GAAG,GACP,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;6BACpB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;4BACb,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;4BAC1B,IACE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC;gCACtC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;gCACjB,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAClB,CAAC;gCACD,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;4BACxC,CAAC;4BACD,OAAO,GAAG,CAAC;wBACb,CAAC,CAAC;6BACD,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC;wBAE3C,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBAGvB,IAAI,OAAO,CAAC,OAAO,IAAI,WAAW,GAAG,KAAK,KAAK,CAAC,EAAE,CAAC;4BACjD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,KAAK,CACH,eAAe,WAAW,CAAC,cAAc,EAAE,YAAY,EACvD,KAAK,CACN,CACF,CAAC;wBACJ,CAAC;oBACH,CAAC;oBAAC,OAAO,KAAU,EAAE,CAAC;wBAEpB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;4BAClB,OAAO,CAAC,IAAI,CACV,KAAK,CACH,0CAA0C,KAAK,CAAC,OAAO,EAAE,EACzD,QAAQ,CACT,CACF,CAAC;wBACJ,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;YAE9B,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBAClB,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAG/B,IAAI,QAAQ,GAAG,GAAG,CAAC;oBACnB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;wBACtB,MAAM,SAAS,GAAG,OAAO,CAAC,SAAmC,CAAC;wBAC9D,QAAQ,GAAG,EAAE,CAAC;wBACd,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;4BACzD,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;gCACjB,QAAgB,CAAC,MAAM,CAAC,GAAI,GAAW,CAAC,MAAM,CAAC,CAAC;4BACnD,CAAC;wBACH,CAAC;wBAED,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;4BAC/C,IAAI,CAAC,CAAC,GAAG,IAAI,SAAS,CAAC,EAAE,CAAC;gCACvB,QAAgB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;4BACjC,CAAC;wBACH,CAAC;oBACH,CAAC;oBAED,WAAW,EAAE,CAAC;oBAEd,IAAI,CAAC,cAAc,IAAI,OAAO,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;wBACxD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBACtC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;oBACnE,CAAC;oBAED,MAAM,GAAG,GACP,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;yBACpB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;wBACb,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;wBAC1B,IACE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC;4BACtC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;4BACjB,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAClB,CAAC;4BACD,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;wBACxC,CAAC;wBACD,OAAO,GAAG,CAAC;oBACb,CAAC,CAAC;yBACD,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC;oBAE3C,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACzB,CAAC;gBAAC,OAAO,KAAU,EAAE,CAAC;gBAEtB,CAAC;YACH,CAAC;YAED,WAAW,CAAC,GAAG,EAAE,CAAC;YAGlB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAClC,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAC1C,CAAC;YAEF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YACvC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CACT,KAAK,CACH,gBAAgB,WAAW,CAAC,cAAc,EAAE,eAAe,OAAO,IAAI,EACtE,OAAO,CACR,CACF,CAAC;gBACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;YACvD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC/B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAChC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,kBAAkB,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;YAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,SAAS,EAAE,UAAU,EAAE,OAAY;IAChE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,IAAI,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC,CAAC;QACxD,CAAC;QAGD,MAAM,UAAU,GAAG,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC1D,MAAM,WAAW,GAAG,EAAE,CAAC,iBAAiB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAG7D,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAEzB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,UAAU,GAAG,IAAI,CAAC;QACtB,IAAI,OAAO,GAAG,EAAE,CAAC;QAEjB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC;YAGhB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,SAAS;gBACX,CAAC;gBAED,QAAQ,EAAE,CAAC;gBAGX,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC,CAAC;gBAGlE,IAAI,QAAQ,KAAK,CAAC,IAAI,OAAO,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;oBACnD,OAAO,GAAG,MAAM,CAAC;oBACjB,SAAS;gBACX,CAAC;gBAGD,MAAM,GAAG,GAAG,EAAE,CAAC;gBACf,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;gBAE3D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;oBACpC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;oBAE9C,IAAI,WAAW,GAAG,MAAM,CAAC;oBACzB,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;wBACnD,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;oBAC1C,CAAC;oBAED,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oBAGtB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;wBAEzB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;wBAC7B,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;wBACpC,IAAI,CAAC,SAAS,IAAI,GAAG,IAAI,SAAS,IAAI,GAAG,CAAC,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;4BACrF,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;4BAChC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gCACjC,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;oCAClF,KAAK,GAAG,GAAG,CAAC;gCACd,CAAC;4BACH,CAAC;wBACH,CAAC;oBACH,CAAC;oBAGD,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;wBAC1B,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;wBACvC,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;4BAC1B,KAAK,GAAG,IAAI,CAAC;wBACf,CAAC;wBACD,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;4BAC3B,KAAK,GAAG,KAAK,CAAC;wBAChB,CAAC;oBACH,CAAC;oBAED,GAAG,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC;gBAC3B,CAAC;gBAGD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACpC,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC3B,CAAC;gBACD,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC;gBAClC,UAAU,GAAG,KAAK,CAAC;gBAGnB,IAAI,OAAO,CAAC,OAAO,IAAI,QAAQ,GAAG,KAAK,KAAK,CAAC,EAAE,CAAC;oBAC9C,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,KAAK,CAAC,eAAe,QAAQ,CAAC,cAAc,EAAE,SAAS,EAAE,KAAK,CAAC,CAChE,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;YAE9B,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBAClB,MAAM,MAAM,GAAG,kBAAkB,CAC/B,MAAM,CAAC,IAAI,EAAE,EACb,OAAO,CAAC,SAAS,IAAI,GAAG,CACzB,CAAC;gBAEF,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtB,QAAQ,EAAE,CAAC;oBAGX,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,IAAI,OAAO,CAAC,UAAU,KAAK,KAAK,CAAC,EAAE,CAAC;wBACtD,MAAM,GAAG,GAAG,EAAE,CAAC;wBACf,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;wBAE3D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;4BACpC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;4BAE9C,IAAI,WAAW,GAAG,MAAM,CAAC;4BACzB,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;gCACnD,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;4BAC1C,CAAC;4BACD,GAAG,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;wBAC/B,CAAC;wBAED,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;wBACpC,IAAI,CAAC,UAAU,EAAE,CAAC;4BAChB,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;wBAC3B,CAAC;wBACD,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC;oBACpC,CAAC;gBACH,CAAC;YACH,CAAC;YAGD,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACzB,WAAW,CAAC,GAAG,EAAE,CAAC;YAGlB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAClC,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAC1C,CAAC;YAEF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YACvC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CACT,KAAK,CACH,gBAAgB,CAAC,QAAQ,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,YAAY,OAAO,IAAI,EAC3G,OAAO,CACR,CACF,CAAC;gBACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;YACvD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC/B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAChC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,kBAAkB,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;YAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAGD,SAAS,kBAAkB,CAAC,IAAI,EAAE,SAAc;IAC9C,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAErB,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,IAAI,QAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBAE3D,YAAY,IAAI,GAAG,CAAC;gBACpB,CAAC,EAAE,CAAC;YACN,CAAC;iBAAM,CAAC;gBAEN,QAAQ,GAAG,CAAC,QAAQ,CAAC;YACvB,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC1B,YAAY,GAAG,EAAE,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,YAAY,IAAI,IAAI,CAAC;QACvB,CAAC;IACH,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC1B,OAAO,MAAM,CAAC;AAChB,CAAC;AAMD,KAAK,UAAU,cAAc,CAAC,YAAY,EAAE,SAAS,EAAE,OAAY;IACjE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,IAAI,IAAI,CAAC;QACT,IAAI,CAAC;YACH,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CACX,KAAK,CACH,6DAA6D,EAC7D,KAAK,CACN,CACF,CAAC;YACF,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,qCAAqC,EAAE,MAAM,CAAC,CAAC,CAAC;YACpE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,qCAAqC,EAAE,MAAM,CAAC,CAAC,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACpC,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QAEH,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,sCAAsC,YAAY,EAAE,EAAE,KAAK,CAAC,CACnE,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,CAAC,MAAM,sBAAsB,EAAE,KAAK,CAAC,CAAC,CAAC;QACzE,CAAC;QAGD,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAExD,MAAM,OAAO,GAAsB,EAAE,CAAC;QACtC,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;QAG5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,aAAa,EAAE,CAAC;YACrD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;gBACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,QAAQ,MAAM,CAAC,CAAC;gBAE3D,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;gBACrD,CAAC;gBAED,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE;wBACtD,GAAG,OAAO;wBACV,MAAM,EAAE,IAAI;qBACb,CAAC,CAAC;oBAEH,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;wBACpB,OAAO,CAAC,GAAG,CACT,KAAK,CACH,OAAO,QAAQ,WAAW,QAAQ,SAAS,MAAM,CAAC,OAAO,WAAW,EACpE,OAAO,CACR,CACF,CAAC;oBACJ,CAAC;oBAED,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;gBAC5C,CAAC;gBAAC,OAAO,KAAU,EAAE,CAAC;oBACpB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;wBACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,QAAQ,UAAU,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;oBACtE,CAAC;oBACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;gBACxD,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;YAE9B,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBACpB,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;gBACnC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;gBAC7D,OAAO,CAAC,GAAG,CACT,KAAK,CACH,eAAe,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,IAAI,EACxD,KAAK,CACN,CACF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACvC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QAC3D,MAAM,YAAY,GAAG,OAAO;aACzB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;aACxB,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAEjD,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,qCAAqC,OAAO,IAAI,EAAE,OAAO,CAAC,CACjE,CAAC;YACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,iBAAiB,UAAU,IAAI,KAAK,CAAC,MAAM,QAAQ,EAAE,KAAK,CAAC,CAClE,CAAC;YACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,oBAAoB,YAAY,CAAC,cAAc,EAAE,EAAE,EAAE,KAAK,CAAC,CAClE,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,uBAAuB,SAAS,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QAChE,CAAC;QAED,OAAO;YACL,UAAU,EAAE,KAAK,CAAC,MAAM;YACxB,UAAU;YACV,YAAY;YACZ,IAAI,EAAE,OAAO;YACb,OAAO;SACR,CAAC;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,6BAA6B,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QAC1E,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,YAAY,EAAE,SAAS,EAAE,OAAY;IACjE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,IAAI,IAAI,CAAC;QACT,IAAI,CAAC;YACH,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CACX,KAAK,CACH,6DAA6D,EAC7D,KAAK,CACN,CACF,CAAC;YACF,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,qCAAqC,EAAE,MAAM,CAAC,CAAC,CAAC;YACpE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,qCAAqC,EAAE,MAAM,CAAC,CAAC,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACpC,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QAEH,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,sCAAsC,YAAY,EAAE,EAAE,KAAK,CAAC,CACnE,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,CAAC,MAAM,sBAAsB,EAAE,KAAK,CAAC,CAAC,CAAC;QACzE,CAAC;QAGD,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAExD,MAAM,OAAO,GAAsB,EAAE,CAAC;QACtC,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;QAG5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,aAAa,EAAE,CAAC;YACrD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;gBACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,QAAQ,OAAO,CAAC,CAAC;gBAE5D,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;gBACrD,CAAC;gBAED,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE;wBACtD,GAAG,OAAO;wBACV,MAAM,EAAE,IAAI;qBACb,CAAC,CAAC;oBAEH,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;wBACpB,OAAO,CAAC,GAAG,CACT,KAAK,CACH,OAAO,QAAQ,UAAU,QAAQ,UAAU,MAAM,CAAC,IAAI,QAAQ,EAC9D,OAAO,CACR,CACF,CAAC;oBACJ,CAAC;oBAED,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;gBAC5C,CAAC;gBAAC,OAAO,KAAU,EAAE,CAAC;oBACpB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;wBACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,QAAQ,SAAS,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;oBACrE,CAAC;oBACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;gBACxD,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;YAE9B,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBACpB,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;gBACnC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;gBAC7D,OAAO,CAAC,GAAG,CACT,KAAK,CACH,eAAe,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,IAAI,EACxD,KAAK,CACN,CACF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACvC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QAC3D,MAAM,SAAS,GAAG,OAAO;aACtB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;aACxB,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAE9C,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,qCAAqC,OAAO,IAAI,EAAE,OAAO,CAAC,CACjE,CAAC;YACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,iBAAiB,UAAU,IAAI,KAAK,CAAC,MAAM,QAAQ,EAAE,KAAK,CAAC,CAClE,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,SAAS,CAAC,cAAc,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;YACzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,uBAAuB,SAAS,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QAChE,CAAC;QAED,OAAO;YACL,UAAU,EAAE,KAAK,CAAC,MAAM;YACxB,UAAU;YACV,SAAS;YACT,IAAI,EAAE,OAAO;YACb,OAAO;SACR,CAAC;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,6BAA6B,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QAC1E,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,YAAY,EAAE,SAAS,EAAE,OAAY;IACpE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,IAAI,IAAI,CAAC;QACT,IAAI,CAAC;YACH,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CACX,KAAK,CACH,6DAA6D,EAC7D,KAAK,CACN,CACF,CAAC;YACF,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,qCAAqC,EAAE,MAAM,CAAC,CAAC,CAAC;YACpE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,qCAAqC,EAAE,MAAM,CAAC,CAAC,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAGD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACpC,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QAEH,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,sCAAsC,YAAY,EAAE,EAAE,KAAK,CAAC,CACnE,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,CAAC,MAAM,sBAAsB,EAAE,KAAK,CAAC,CAAC,CAAC;QACzE,CAAC;QAGD,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAExD,MAAM,OAAO,GAAsB,EAAE,CAAC;QACtC,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;QAG5C,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACtC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CACrC,CAAC;QACF,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACrC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CACpC,CAAC;QACF,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAC7B,CAAC,IAAI,EAAE,EAAE,CACP,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;YACrC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CACvC,CAAC;QAEF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAC7C,OAAO,CAAC,GAAG,CACT,KAAK,CACH,uBAAuB,UAAU,CAAC,MAAM,qBAAqB,EAC7D,QAAQ,CACT,CACF,CAAC;QACJ,CAAC;QAGD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,aAAa,EAAE,CAAC;YACzD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC;YACpD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;gBACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,QAAQ,MAAM,CAAC,CAAC;gBAE3D,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,sBAAsB,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC1D,CAAC;gBAED,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE;wBACtD,GAAG,OAAO;wBACV,MAAM,EAAE,IAAI;qBACb,CAAC,CAAC;oBAEH,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;wBACpB,OAAO,CAAC,GAAG,CACT,KAAK,CACH,OAAO,QAAQ,WAAW,QAAQ,SAAS,MAAM,CAAC,OAAO,WAAW,EACpE,OAAO,CACR,CACF,CAAC;oBACJ,CAAC;oBAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;gBAC1D,CAAC;gBAAC,OAAO,KAAU,EAAE,CAAC;oBACpB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;wBACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,QAAQ,UAAU,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;oBACtE,CAAC;oBACD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;gBACtE,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;QAChC,CAAC;QAGD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,aAAa,EAAE,CAAC;YACxD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;gBACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,QAAQ,OAAO,CAAC,CAAC;gBAE5D,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,qBAAqB,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;gBACzD,CAAC;gBAED,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE;wBACtD,GAAG,OAAO;wBACV,MAAM,EAAE,IAAI;qBACb,CAAC,CAAC;oBAEH,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;wBACpB,OAAO,CAAC,GAAG,CACT,KAAK,CACH,OAAO,QAAQ,UAAU,QAAQ,UAAU,MAAM,CAAC,IAAI,QAAQ,EAC9D,OAAO,CACR,CACF,CAAC;oBACJ,CAAC;oBAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;gBACzD,CAAC;gBAAC,OAAO,KAAU,EAAE,CAAC;oBACpB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;wBACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,QAAQ,SAAS,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;oBACrE,CAAC;oBACD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;gBACrE,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;QAChC,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACvC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QAC3D,MAAM,YAAY,GAAG,OAAO;aACzB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;aACxB,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAE3D,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,2CAA2C,OAAO,IAAI,EAAE,OAAO,CAAC,CACvE,CAAC;YACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,iBAAiB,UAAU,IAAI,KAAK,CAAC,MAAM,QAAQ,EAAE,KAAK,CAAC,CAClE,CAAC;YACF,OAAO,CAAC,GAAG,CACT,KAAK,CACH,iBAAiB,SAAS,CAAC,MAAM,gBAAgB,QAAQ,CAAC,MAAM,EAAE,EAClE,KAAK,CACN,CACF,CAAC;YACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,oBAAoB,YAAY,CAAC,cAAc,EAAE,EAAE,EAAE,KAAK,CAAC,CAClE,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,uBAAuB,SAAS,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QAChE,CAAC;QAED,OAAO;YACL,UAAU,EAAE,KAAK,CAAC,MAAM;YACxB,SAAS,EAAE,SAAS,CAAC,MAAM;YAC3B,QAAQ,EAAE,QAAQ,CAAC,MAAM;YACzB,UAAU,EAAE,UAAU,CAAC,MAAM;YAC7B,UAAU;YACV,YAAY;YACZ,IAAI,EAAE,OAAO;YACb,OAAO;SACR,CAAC;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,6BAA6B,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QAC1E,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAMD,SAAS,YAAY,CAAC,IAAS;IAC7B,MAAM,OAAO,GAAG;QACd,SAAS,EAAE,GAAG;QACd,UAAU,EAAE,IAAI;QAChB,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC;QACjC,UAAU,EAAE,IAAI;QAChB,cAAc,EAAE,IAAI;QACpB,SAAS,EAAE,SAAS;QACpB,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,IAAI;QACV,YAAY,EAAE,KAAK;QACnB,aAAa,EAAE,KAAK;QACpB,WAAW,EAAE,IAAI;QACjB,YAAY,EAAE,SAAS;QACvB,eAAe,EAAE,IAAI;QACrB,eAAe,EAAE,IAAI;QACrB,mBAAmB,EAAE,IAAI;QACzB,gBAAgB,EAAE,IAAI;QACtB,UAAU,EAAE,SAAS;QACrB,OAAO,EAAE,SAAS;QAClB,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,KAAK;QACb,YAAY,EAAE,KAAK;QACnB,gBAAgB,EAAE,KAAK;QACvB,SAAS,EAAE,KAAK;QAChB,OAAO,EAAE,MAAM;QACf,SAAS,EAAE,UAAU;QACrB,eAAe,EAAE,KAAK;QACtB,iBAAiB,EAAE,KAAK;QACxB,SAAS,EAAE,KAAK;QAChB,QAAQ,EAAE,CAAC;QACX,SAAS,EAAE,KAAK;QAChB,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,SAAS;QACjB,SAAS,EAAE,SAAS;QACpB,aAAa,EAAE,GAAG;QAClB,OAAO,EAAE,KAAK;QACd,gBAAgB,EAAE,GAAG;QACrB,eAAe,EAAE,CAAC;QAClB,aAAa,EAAE,WAAW;QAC1B,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,WAAW;KAClB,CAAC;IAEF,MAAM,KAAK,GAAG,EAAE,CAAC;IAEjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpB,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAE7C,QAAQ,GAAG,EAAE,CAAC;gBACd,KAAK,WAAW;oBACd,OAAO,CAAC,SAAS,GAAG,KAAK,IAAI,GAAG,CAAC;oBACjC,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC;oBAC3B,MAAM;gBACR,KAAK,aAAa;oBAChB,OAAO,CAAC,UAAU,GAAG,KAAK,KAAK,OAAO,CAAC;oBACvC,MAAM;gBACR,KAAK,YAAY;oBACf,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;oBACtE,MAAM;gBACR,KAAK,YAAY;oBACf,OAAO,CAAC,cAAc,GAAG,KAAK,CAAC;oBAC/B,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC;oBAC3B,MAAM;gBACR,KAAK,eAAe;oBAClB,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;oBAC5B,MAAM;gBACR,KAAK,gBAAgB;oBACnB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;oBAC7B,MAAM;gBACR,KAAK,SAAS;oBACZ,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC;oBACrB,MAAM;gBACR,KAAK,cAAc;oBACjB,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC;oBAC5B,MAAM;gBACR,KAAK,WAAW;oBACd,OAAO,CAAC,WAAW,GAAG,KAAK,KAAK,OAAO,CAAC;oBACxC,MAAM;gBACR,KAAK,gBAAgB;oBACnB,OAAO,CAAC,YAAY,GAAG,KAAK,IAAI,SAAS,CAAC;oBAC1C,IACE,OAAO,CAAC,YAAY,KAAK,SAAS;wBAChC,OAAO,CAAC,YAAY,KAAK,SAAS,EACpC,CAAC;wBACD,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;oBACtE,CAAC;oBACD,MAAM;gBACR,KAAK,mBAAmB;oBACtB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;oBAC/B,MAAM;gBACR,KAAK,kBAAkB;oBACrB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;oBAC/B,MAAM;gBACR,KAAK,QAAQ;oBACX,IAAI,CAAC;wBACH,MAAM,OAAO,GAAG,KAAK,IAAI,IAAI,CAAC;wBAC9B,MAAM,QAAQ,GAAG,OAAO;6BACrB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;6BACrB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;wBACzB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBAC3C,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;oBACnE,CAAC;oBACD,MAAM;gBACR,KAAK,UAAU;oBACb,IAAI,CAAC;wBACH,MAAM,OAAO,GAAG,KAAK,IAAI,IAAI,CAAC;wBAC9B,MAAM,QAAQ,GAAG,OAAO;6BACrB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;6BACrB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;wBACzB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBAC1C,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;oBACrE,CAAC;oBACD,MAAM;gBACR,KAAK,yBAAyB;oBAC5B,OAAO,CAAC,mBAAmB,GAAG,KAAK,CAAC;oBACpC,MAAM;gBACR,KAAK,YAAY;oBACf,OAAO,CAAC,gBAAgB,GAAG,KAAK,CAAC;oBACjC,MAAM;gBACR,KAAK,aAAa;oBAChB,OAAO,CAAC,UAAU,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBACzC,MAAM;gBACR,KAAK,UAAU;oBACb,OAAO,CAAC,OAAO,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBACtC,MAAM;gBACR,KAAK,WAAW;oBACd,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;oBAC5C,MAAM;gBACR,KAAK,QAAQ;oBACX,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;oBACtB,MAAM;gBACR,KAAK,SAAS;oBACZ,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;oBACvB,MAAM;gBACR,KAAK,mBAAmB;oBACtB,OAAO,CAAC,gBAAgB,GAAG,KAAK,IAAI,GAAG,CAAC;oBACxC,MAAM;gBACR,KAAK,mBAAmB;oBACtB,OAAO,CAAC,eAAe,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;oBACnD,MAAM;gBACR,KAAK,gBAAgB;oBACnB,OAAO,CAAC,aAAa,GAAG,KAAK,IAAI,WAAW,CAAC;oBAC7C,IAAI,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;wBACrE,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;oBAC5E,CAAC;oBACD,MAAM;gBACR,KAAK,QAAQ;oBACX,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;oBACtB,MAAM;gBACR,KAAK,SAAS;oBACZ,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;oBACvB,MAAM;gBACR,KAAK,OAAO;oBACV,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;oBACrB,MAAM;gBACR,KAAK,SAAS;oBACZ,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;oBACtB,MAAM;gBACR,KAAK,SAAS;oBACZ,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;oBACtB,MAAM;gBACR,KAAK,eAAe;oBAClB,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;oBAC5B,MAAM;gBACR,KAAK,mBAAmB;oBACtB,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;oBAChC,MAAM;gBACR,KAAK,WAAW;oBACd,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;oBACzB,MAAM;gBACR,KAAK,SAAS;oBACZ,OAAO,CAAC,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC;oBAClC,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;oBAC/B,MAAM;gBACR,KAAK,YAAY;oBACf,OAAO,CAAC,SAAS,GAAG,KAAK,IAAI,UAAU,CAAC;oBACxC,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;oBACjC,MAAM;gBACR,KAAK,WAAW;oBACd,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;oBACzB,MAAM;gBACR,KAAK,UAAU;oBACb,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;oBAC5C,MAAM;gBACR,KAAK,YAAY;oBACf,OAAO,CAAC,SAAS,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC;oBACjD,MAAM;gBACR,KAAK,aAAa;oBAChB,OAAO,CAAC,UAAU,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC;oBACjD,MAAM;gBACR,KAAK,QAAQ;oBACX,IAAI,CAAC;wBACH,MAAM,OAAO,GAAG,KAAK,IAAI,IAAI,CAAC;wBAC9B,MAAM,QAAQ,GAAG,OAAO;6BACrB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;6BACrB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;wBACzB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBACxC,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;oBACnE,CAAC;oBACD,MAAM;gBACR,KAAK,WAAW;oBACd,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC;oBAC1B,MAAM;gBACR,KAAK,MAAM;oBACT,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC;oBAC3C,MAAM;gBACR,KAAK,MAAM;oBACT,OAAO,CAAC,IAAI,GAAG,KAAK,IAAI,WAAW,CAAC;oBACpC,MAAM;YACR,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC5B,CAAC;AAMD,KAAK,UAAU,SAAS;IACtB,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,sCAAsC,EAAE,MAAM,CAAC,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC,CAAC;QAElD,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;QACvC,MAAM,GAAG,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,GAAG,CAAC,KAAK,EAAE,CAAC;IACd,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YACtC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,UAAe,EAAE;IAC1C,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAC/C,SAAS,CAAC,WAAW,CAAC;YACpB,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI;YAC1B,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,WAAW;SAClC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QACvD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa;IAE1B,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,0CAA0C,EAAE,MAAM,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,0CAA0C,EAAE,MAAM,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,0CAA0C,EAAE,MAAM,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACzB,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,sBAAsB,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAClE,QAAQ,MAAM,EAAE,CAAC;YACjB,KAAK,GAAG;gBACN,MAAM,eAAe,CAAC,EAAE,CAAC,CAAC;gBAC1B,MAAM;YACR,KAAK,GAAG;gBACN,MAAM,eAAe,CAAC,EAAE,CAAC,CAAC;gBAC1B,MAAM;YACR,KAAK,GAAG;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,mCAAmC,EAAE,QAAQ,CAAC,CAAC,CAAC;gBAClE,EAAE,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM;YACR,KAAK,GAAG;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,iCAAiC,EAAE,QAAQ,CAAC,CAAC,CAAC;gBAChE,EAAE,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM;YACR,KAAK,GAAG;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;gBACxC,EAAE,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM;YACR;gBACE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC5C,EAAE,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,EAAO;IACpC,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,EAAE,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC,SAAS,EAAE,EAAE;QAC7C,EAAE,CAAC,QAAQ,CAAC,mBAAmB,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;YACpD,EAAE,CAAC,QAAQ,CAAC,0BAA0B,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;gBAC1D,IAAI,CAAC;oBACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC,CAAC;oBAE7C,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,SAAS,EAAE,UAAU,EAAE;wBAC3D,SAAS,EAAE,SAAS,IAAI,GAAG;wBAC3B,MAAM,EAAE,KAAK;qBACd,CAAC,CAAC;oBAEH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,OAAO,CAAC,CAAC,CAAC;oBACxD,EAAE,CAAC,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;wBAC/C,EAAE,CAAC,KAAK,EAAE,CAAC;wBACX,aAAa,EAAE,CAAC;oBAClB,CAAC,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,KAAU,EAAE,CAAC;oBACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;oBACzD,EAAE,CAAC,KAAK,EAAE,CAAC;oBACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,EAAO;IACpC,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,EAAE,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,SAAS,EAAE,EAAE;QAC5C,EAAE,CAAC,QAAQ,CAAC,oBAAoB,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;YACrD,EAAE,CAAC,QAAQ,CAAC,0BAA0B,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;gBAC1D,EAAE,CAAC,QAAQ,CAAC,uBAAuB,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;oBACpD,IAAI,CAAC;wBACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC,CAAC;wBAE7C,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,SAAS,EAAE,UAAU,EAAE;4BAC3D,SAAS,EAAE,SAAS,IAAI,GAAG;4BAC3B,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG;4BACpC,MAAM,EAAE,KAAK;yBACd,CAAC,CAAC;wBAEH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,OAAO,CAAC,CAAC,CAAC;wBACxD,EAAE,CAAC,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;4BAC/C,EAAE,CAAC,KAAK,EAAE,CAAC;4BACX,aAAa,EAAE,CAAC;wBAClB,CAAC,CAAC,CAAC;oBACL,CAAC;oBAAC,OAAO,KAAU,EAAE,CAAC;wBACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;wBACzD,EAAE,CAAC,KAAK,EAAE,CAAC;wBACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAClB,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAMD,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,QAAQ,EAAE,CAAC;QACX,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACtC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAGvD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,qCAAqC,EAAE,QAAQ,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACjC,OAAO;IACT,CAAC;IAGD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;QACvB,OAAO,CAAC,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;IAC1B,CAAC;IAED,QAAQ,OAAO,EAAE,CAAC;QAElB,KAAK,aAAa,CAAC;QACnB,KAAK,UAAU;YACb,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC,CAAC;gBACtE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,gDAAgD,EAAE,MAAM,CAAC,CAChE,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACpD,MAAM;QAER,KAAK,aAAa,CAAC;QACnB,KAAK,UAAU;YACb,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC,CAAC;gBACtE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,gDAAgD,EAAE,MAAM,CAAC,CAChE,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACpD,MAAM;QAER,KAAK,WAAW;YACd,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC,CAAC;gBACtE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,+CAA+C,EAAE,MAAM,CAAC,CAC/D,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAC9C,MAAM;QAER,KAAK,UAAU;YACb,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC,CAAC;gBACtE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,4CAA4C,EAAE,MAAM,CAAC,CAC5D,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAC7C,MAAM;QAER,KAAK,YAAY;YACf,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC,CAAC;gBACtE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,gDAAgD,EAAE,MAAM,CAAC,CAChE,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAClD,MAAM;QAGR,KAAK,eAAe;YAClB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC,CAAC;gBACtE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,oDAAoD,EAAE,MAAM,CAAC,CACpE,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACtD,MAAM;QAER,KAAK,eAAe;YAClB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC,CAAC;gBACtE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,oDAAoD,EAAE,MAAM,CAAC,CACpE,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACtD,MAAM;QAER,KAAK,gBAAgB;YACnB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC,CAAC;gBACtE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,sDAAsD,EAAE,MAAM,CAAC,CACtE,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACvD,MAAM;QAER,KAAK,gBAAgB;YACnB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC,CAAC;gBACtE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,sDAAsD,EAAE,MAAM,CAAC,CACtE,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACvD,MAAM;QAGR,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS;YACZ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC,CAAC;gBACtE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,4CAA4C,EAAE,MAAM,CAAC,CAC5D,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAC9C,MAAM;QAGR,KAAK,QAAQ;YACX,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAC1D,CAAC;gBACF,OAAO,CAAC,GAAG,CACT,KAAK,CACH,wEAAwE,EACxE,MAAM,CACP,CACF,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAE5C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjC,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,GAChD,YAAY,CAAC,UAAU,CAAC,CAAC;YAE7B,IAAI,aAAa,KAAK,aAAa,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBAC/D,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;YACvE,CAAC;iBAAM,IAAI,aAAa,KAAK,aAAa,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACtE,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;YACvE,CAAC;iBAAM,IAAI,aAAa,KAAK,aAAa,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBAEtE,IAAI,CAAC;oBACH,MAAM,UAAU,GAAG,EAAE,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;oBAC/D,MAAM,WAAW,GAAG,EAAE,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;oBAEjE,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;wBACzB,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBAC9B,CAAC;oBAED,MAAM,eAAe,GAAG,KAAK,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;oBACnE,MAAM,QAAQ,CAAC,UAAU,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC;oBAEzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,8BAA8B,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC9D,CAAC;gBAAC,OAAO,KAAU,EAAE,CAAC;oBACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;oBACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;iBAAM,IAAI,aAAa,KAAK,cAAc,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBAEvE,IAAI,CAAC;oBACH,MAAM,UAAU,GAAG,EAAE,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;oBAC/D,MAAM,WAAW,GAAG,EAAE,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;oBAEjE,MAAM,eAAe,GAAG,KAAK,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;oBACnE,MAAM,QAAQ,CAAC,UAAU,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC;oBAEzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,8BAA8B,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC9D,CAAC;gBAAC,OAAO,KAAU,EAAE,CAAC;oBACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;oBACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,mDAAmD,EAAE,KAAK,CAAC,CAClE,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM;QAGR,KAAK,OAAO;YACV,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC,CAAC;gBACrE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,sDAAsD,EAAE,MAAM,CAAC,CACtE,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAE3C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAChC,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,GAC9C,YAAY,CAAC,SAAS,CAAC,CAAC;YAC5B,MAAM,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC;mBAC7B,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACvE,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC;mBAC1B,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAE3E,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChC,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,+DAA+D,EAAE,KAAK,CAAC,CAC9E,CAAC;gBACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,gFAAgF,EAAE,MAAM,CAAC,CAChG,CAAC;gBACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,kFAAkF,EAAE,MAAM,CAAC,CAClG,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,IAAI,YAAY,KAAK,aAAa,EAAE,CAAC;gBACnC,MAAM,cAAc,CAAC,YAAY,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;YAC9D,CAAC;iBAAM,IAAI,YAAY,KAAK,aAAa,EAAE,CAAC;gBAC1C,MAAM,cAAc,CAAC,YAAY,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;YAC9D,CAAC;iBAAM,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;gBACtC,MAAM,iBAAiB,CAAC,YAAY,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;YACjE,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,+CAA+C,EAAE,KAAK,CAAC,CAC9D,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM;QAGR,KAAK,KAAK;YACR,MAAM,SAAS,EAAE,CAAC;YAClB,MAAM;QAGR,KAAK,KAAK;YACR,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;YAC3B,MAAM;QAGR,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI;YACP,QAAQ,EAAE,CAAC;YACX,MAAM;QAER,KAAK,SAAS,CAAC;QACf,KAAK,IAAI,CAAC;QACV,KAAK,WAAW;YACd,WAAW,EAAE,CAAC;YACd,MAAM;QAER;YACE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,2BAA2B,OAAO,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;YACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,uCAAuC,EAAE,MAAM,CAAC,CAAC,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAMD,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAU,EAAE,EAAE;IAC7C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,uBAAuB,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;IACpE,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,KAAU,EAAE,EAAE;IAC9C,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,oCAAoC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAClE,CAAC;IACF,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAGH,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAU,EAAE,EAAE;QAC1B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,CAAC","sourcesContent":["#!/usr/bin/env node\r\n\r\n/**\r\n * jtcsv CLI - Complete Command Line Interface\r\n *\r\n * Full-featured command-line interface for JSON↔CSV conversion\r\n * with streaming, batch processing, and all security features.\r\n */\r\n\r\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport * as readline from 'readline';\nconst { pipeline } = require('stream/promises');\nimport * as jtcsv from '../index';\nconst transformLoader = require('../src/utils/transform-loader');\nconst schemaValidator = require('../src/utils/schema-validator');\n\r\nconst VERSION = require('../package.json').version;\n\ntype ConversionResult = {\n records?: number;\n rows?: number;\n bytes?: number;\n time?: number;\n};\n\ntype BatchFileResult = ConversionResult & {\n file: string;\n success: boolean;\n error?: string;\n};\n\ntype BatchSummary = {\n totalFiles: number;\n successful: number;\n totalRecords?: number;\n totalRows?: number;\n jsonFiles?: number;\n csvFiles?: number;\n otherFiles?: number;\n time: number;\n results: BatchFileResult[];\n};\n\n// Function to apply transform from JavaScript file\nasync function applyTransform(data, transformFile: any): Promise<any> {\n try {\r\n const transformPath = path.resolve(process.cwd(), transformFile);\r\n const transformModule = require(transformPath);\r\n\r\n // Check if module exports a function\r\n if (typeof transformModule === 'function') {\r\n return transformModule(data);\r\n } else if (typeof transformModule.default === 'function') {\r\n return transformModule.default(data);\r\n } else if (typeof transformModule.transform === 'function') {\r\n return transformModule.transform(data);\r\n } else {\r\n throw new Error(\r\n `Transform file must export a function. Found: ${typeof transformModule}`\r\n );\r\n }\r\n } catch (error: any) {\r\n throw new Error(\r\n `Failed to apply transform from ${transformFile}: ${error.message}`\r\n );\r\n }\r\n}\r\n\r\n// ANSI colors for terminal output\r\nconst colors = {\r\n reset: '\\x1b[0m',\r\n bright: '\\x1b[1m',\r\n dim: '\\x1b[2m',\r\n red: '\\x1b[31m',\r\n green: '\\x1b[32m',\r\n yellow: '\\x1b[33m',\r\n blue: '\\x1b[34m',\r\n magenta: '\\x1b[35m',\r\n cyan: '\\x1b[36m',\r\n white: '\\x1b[37m'\r\n};\r\n\r\nfunction color(text, colorName: any): any {\r\n return (colors as any)[colorName] + text + colors.reset;\r\n}\r\n\r\nfunction showHelp(): void {\r\n console.log(`\r\n${color('jtcsv CLI v' + VERSION, 'cyan')}\r\n${color('The Complete JSON<->CSV Converter for Node.js', 'dim')}\r\n\r\n${color('USAGE:', 'bright')}\r\n jtcsv [command] [options] [file...]\r\n\r\n${color('MAIN COMMANDS:', 'bright')}\r\n ${color('json-to-csv', 'green')} Convert JSON to CSV (alias: json2csv)\r\n ${color('csv-to-json', 'green')} Convert CSV to JSON (alias: csv2json)\r\n ${color('ndjson-to-csv', 'green')} Convert NDJSON to CSV\r\n ${color('csv-to-ndjson', 'green')} Convert CSV to NDJSON\r\n ${color('ndjson-to-json', 'green')} Convert NDJSON to JSON array\r\n ${color('json-to-ndjson', 'green')} Convert JSON array to NDJSON\r\n ${color('save-json', 'yellow')} Save data as JSON file\r\n ${color('save-csv', 'yellow')} Save data as CSV file\r\n ${color('stream', 'yellow')} Streaming conversion for large files\r\n ${color('batch', 'yellow')} Batch process multiple files\r\n ${color('preprocess', 'magenta')} Preprocess JSON with deep unwrapping\r\n ${color('unwrap', 'magenta')} Flatten nested JSON structures (alias: flatten)\r\n ${color('tui', 'magenta')} Launch Terminal User Interface (@jtcsv/tui)\r\n ${color('web', 'magenta')} Launch Web Interface (http://localhost:3000)\r\n ${color('help', 'blue')} Show this help message\r\n ${color('version', 'blue')} Show version information\r\n\r\n${color('STREAMING SUBCOMMANDS:', 'bright')}\r\n ${color('stream json-to-csv', 'dim')} Stream JSON to CSV\r\n ${color('stream csv-to-json', 'dim')} Stream CSV to JSON\r\n ${color('stream file-to-csv', 'dim')} Stream file to CSV\r\n ${color('stream file-to-json', 'dim')} Stream file to JSON\r\n\r\n${color('BATCH SUBCOMMANDS:', 'bright')}\r\n ${color('batch json-to-csv', 'dim')} Batch convert JSON files to CSV\r\n ${color('batch csv-to-json', 'dim')} Batch convert CSV files to JSON\r\n ${color('batch process', 'dim')} Process mixed file types\r\n\r\n${color('EXAMPLES:', 'bright')}\r\n ${color('Convert JSON file to CSV:', 'dim')}\r\n jtcsv json-to-csv input.json output.csv --delimiter=,\r\n\r\n ${color('Convert CSV file to JSON:', 'dim')}\r\n jtcsv csv-to-json input.csv output.json --parse-numbers --auto-detect\r\n\r\n ${color('Save data as JSON file:', 'dim')}\r\n jtcsv save-json data.json output.json --pretty\r\n\r\n ${color('Save data as CSV file:', 'dim')}\r\n jtcsv save-csv data.csv output.csv --delimiter=, --transform=transform.js\r\n\r\n ${color('Stream large JSON file to CSV:', 'dim')}\r\n jtcsv stream json-to-csv large.json output.csv --max-records=1000000\r\n\r\n ${color('Stream CSV file to JSON:', 'dim')}\r\n jtcsv stream csv-to-json large.csv output.json --max-rows=500000\r\n\r\n ${color('Preprocess complex JSON:', 'dim')}\r\n jtcsv preprocess complex.json simplified.json --max-depth=3\r\n\r\n ${color('Batch convert JSON files:', 'dim')}\r\n jtcsv batch json-to-csv \"data/*.json\" \"output/\" --delimiter=;\r\n\r\n ${color('Launch TUI interface:', 'dim')}\r\n jtcsv tui\r\n\r\n ${color('Launch Web interface:', 'dim')}\r\n jtcsv web --port=3000\r\n\r\n${color('CONVERSION OPTIONS:', 'bright')}\r\n ${color('--delimiter=', 'cyan')}CHAR CSV delimiter (default: ;)\r\n ${color('--auto-detect', 'cyan')} Auto-detect delimiter (default: true)\r\n ${color('--candidates=', 'cyan')}LIST Delimiter candidates (default: ;,\\t|)\r\n ${color('--no-headers', 'cyan')} Exclude headers from CSV output\r\n ${color('--parse-numbers', 'cyan')} Parse numeric values in CSV\r\n ${color('--parse-booleans', 'cyan')} Parse boolean values in CSV\r\n ${color('--no-trim', 'cyan')} Don't trim whitespace from CSV values\n ${color('--no-fast-path', 'cyan')} Disable fast-path parser (force quote-aware)\n ${color('--fast-path-mode=', 'cyan')}MODE Fast path output mode (objects|compact)\n ${color('--repair-row-shifts', 'cyan')} Repair shifted rows with trailing empty fields\n ${color('--normalize-quotes', 'cyan')} Normalize excessive quotes in parsed fields\n ${color('--rename=', 'cyan')}JSON Rename columns (JSON map)\n ${color('--template=', 'cyan')}JSON Column order template (JSON object)\r\n ${color('--no-injection-protection', 'cyan')} Disable CSV injection protection\r\n ${color('--no-rfc4180', 'cyan')} Disable RFC 4180 compliance\r\n ${color('--max-records=', 'cyan')}N Maximum records to process\r\n ${color('--max-rows=', 'cyan')}N Maximum rows to process\r\n ${color('--pretty', 'cyan')} Pretty print JSON output\r\n ${color('--schema=', 'cyan')}JSON JSON schema for validation and formatting\r\n ${color('--transform=', 'cyan')}JS Custom transform function (JavaScript file)\r\n ${color('PREPROCESS OPTIONS:', 'bright')}\r\n ${color('--max-depth=', 'cyan')}N Maximum recursion depth (default: 5)\r\n ${color('--flatten', 'cyan')} Flatten nested objects into dot notation\r\n ${color('--flatten-separator=', 'cyan')}CHAR Separator for flattened keys (default: .)\r\n ${color('--flatten-max-depth=', 'cyan')}N Maximum flattening depth (default: 3)\r\n ${color('--array-handling=', 'cyan')}MODE Array handling: stringify|join|expand (default: stringify)\r\n ${color('--unwrap-arrays', 'cyan')} Unwrap arrays to strings\r\n ${color('--stringify-objects', 'cyan')} Stringify complex objects\r\n ${color('STREAMING OPTIONS:', 'bright')}\r\n ${color('--chunk-size=', 'cyan')}N Chunk size in bytes (default: 65536)\r\n ${color('--buffer-size=', 'cyan')}N Buffer size in records (default: 1000)\r\n ${color('--add-bom', 'cyan')} Add UTF-8 BOM for Excel compatibility\r\n ${color('BATCH OPTIONS:', 'bright')}\r\n ${color('--recursive', 'cyan')} Process directories recursively\r\n ${color('--pattern=', 'cyan')}GLOB File pattern to match\r\n ${color('--output-dir=', 'cyan')}DIR Output directory for batch processing\r\n ${color('--overwrite', 'cyan')} Overwrite existing files\r\n ${color('--parallel=', 'cyan')}N Parallel processing limit (default: 4)\r\n ${color('GENERAL OPTIONS:', 'bright')}\r\n ${color('--silent', 'cyan')} Suppress all output except errors\r\n ${color('--verbose', 'cyan')} Show detailed progress information\r\n ${color('--debug', 'cyan')} Show debug information\r\n ${color('--dry-run', 'cyan')} Show what would be done without actually doing it\r\n ${color('SECURITY FEATURES:', 'bright')}\r\n - CSV injection protection (enabled by default)\r\n - Path traversal protection\r\n - Input validation and sanitization\r\n - Size limits to prevent DoS attacks\r\n - Schema validation support\r\n\r\n ${color('PERFORMANCE FEATURES:', 'bright')}\r\n - Streaming for files >100MB\r\n - Batch processing with parallel execution\r\n - Memory-efficient preprocessing\r\n - Configurable buffer sizes\r\n\r\n ${color('LEARN MORE:', 'dim')}\r\n GitHub: https://github.com/Linol-Hamelton/jtcsv\r\n Issues: https://github.com/Linol-Hamelton/jtcsv/issues\r\n Documentation: https://github.com/Linol-Hamelton/jtcsv#readme\r\n `);\r\n}\r\n\r\nfunction showVersion(): void {\n console.log(`jtcsv v${VERSION}`);\n console.log(`Node.js ${process.version}`);\n console.log(`Platform: ${process.platform} ${process.arch}`);\n}\n\nasync function readStdin(): Promise<string> {\n return new Promise((resolve, reject) => {\n let data = '';\n process.stdin.setEncoding('utf8');\n process.stdin.on('data', (chunk) => {\n data += chunk;\n });\n process.stdin.on('end', () => resolve(data));\n process.stdin.on('error', reject);\n });\n}\n\n// ============================================================================\n// CONVERSION FUNCTIONS\n// ============================================================================\n\r\nasync function convertJsonToCsv(inputFile, outputFile, options: any): Promise<ConversionResult> {\n const startTime = Date.now();\n const useStdin = inputFile === '-';\n const useStdout = outputFile === '-';\n const shouldLog = !options.silent && !useStdout;\n\n try {\n // Read input\n const inputData = useStdin\n ? await readStdin()\n : await fs.promises.readFile(inputFile, 'utf8');\n const jsonData = JSON.parse(inputData);\n\n if (!Array.isArray(jsonData)) {\n throw new Error('JSON data must be an array of objects');\n }\n\n if (shouldLog) {\n console.log(\n color(\n `Converting ${jsonData.length.toLocaleString()} records...`,\n 'dim'\n )\n );\n }\n\r\n if (options.transform) {\n if (shouldLog) {\n console.log(\n color(`Applying transform from: ${options.transform}`, 'dim')\n );\n }\n let transformedData;\r\ntry {\r\n transformedData = transformLoader.applyTransform(\r\n jsonData,\r\n options.transform\r\n );\r\n if (shouldLog) {\n console.log(\n color(\n `✓ Transform applied to ${transformedData.length} records`,\n 'green'\n )\n );\n }\n } catch (transformError: any) {\r\n console.error(\r\n color(`✗ Transform error: ${transformError.message}`, 'red')\r\n );\r\n if (options.debug) {\r\n console.error(transformError.stack);\r\n }\r\n process.exit(1);\r\n }\r\n }\r\n\r\n // Prepare options for jtcsv\r\n const jtcsvOptions = {\n delimiter: options.delimiter,\n includeHeaders: options.includeHeaders,\n renameMap: options.renameMap,\n template: options.template,\n maxRecords: options.maxRecords,\n preventCsvInjection: options.preventCsvInjection,\n rfc4180Compliant: options.rfc4180Compliant,\n normalizeQuotes: options.normalizeQuotes,\n schema: options.schema, // Add schema option\n flatten: options.flatten,\n flattenSeparator: options.flattenSeparator,\n flattenMaxDepth: options.flattenMaxDepth,\n arrayHandling: options.arrayHandling\n };\r\n\r\n // Apply transform function if provided\r\n let transformedData = jsonData;\r\n if (options.transform) {\r\n transformedData = await applyTransform(jsonData, options.transform);\r\n }\r\n\r\n // Convert to CSV\r\n const csvData = jtcsv.jsonToCsv(transformedData, jtcsvOptions);\r\n\r\n // Write output\n if (useStdout) {\n process.stdout.write(csvData);\n } else {\n await fs.promises.writeFile(outputFile, csvData, 'utf8');\n }\n\n const elapsed = Date.now() - startTime;\n if (shouldLog) {\n console.log(\n color(\n `✓ Converted ${transformedData.length.toLocaleString()} records in ${elapsed}ms`,\n 'green'\n )\n );\n if (!useStdout) {\n console.log(\n color(\n ` Output: ${outputFile} (${csvData.length.toLocaleString()} bytes)`,\n 'dim'\n )\n );\n }\n }\n\r\n return {\r\n records: transformedData.length,\r\n bytes: csvData.length,\r\n time: elapsed\r\n };\r\n } catch (error: any) {\r\n console.error(color(`✗ Error: ${error.message}`, 'red'));\r\n if (options.debug) {\r\n console.error(error.stack);\r\n }\r\n process.exit(1);\r\n }\r\n}\r\n\r\nasync function convertCsvToJson(inputFile, outputFile, options: any): Promise<ConversionResult> {\n const startTime = Date.now();\n const useStdin = inputFile === '-';\n const useStdout = outputFile === '-';\n const shouldLog = !options.silent && !useStdout;\n\n try {\n if (shouldLog) {\n console.log(color('Reading CSV file...', 'dim'));\n }\n\r\n // Prepare options for jtcsv\r\n const jtcsvOptions = {\r\n delimiter: options.delimiter,\r\n autoDetect: options.autoDetect,\r\n candidates: options.candidates,\r\n hasHeaders: options.hasHeaders,\r\n renameMap: options.renameMap,\r\n trim: options.trim,\r\n parseNumbers: options.parseNumbers,\n parseBooleans: options.parseBooleans,\n maxRows: options.maxRows,\n useFastPath: options.useFastPath,\n fastPathMode: options.fastPathMode,\n repairRowShifts: options.repairRowShifts,\n normalizeQuotes: options.normalizeQuotes,\n schema: options.schema // Add schema option if supported\n };\n\r\n // Read and convert CSV\n let jsonData: any;\n if (useStdin) {\n const csvContent = await readStdin();\n jsonData = jtcsv.csvToJson(csvContent, jtcsvOptions);\n } else {\n jsonData = await jtcsv.readCsvAsJson(inputFile, jtcsvOptions);\n }\n\r\n // Apply transform if specified\r\n let transformedData = jsonData;\r\n if (options.transform) {\n if (shouldLog) {\n console.log(\n color(`Applying transform from: ${options.transform}`, 'dim')\n );\n }\n try {\r\n transformedData = transformLoader.applyTransform(\r\n jsonData,\r\n options.transform\r\n );\r\n if (shouldLog) {\n console.log(\n color(\n `✓ Transform applied to ${transformedData.length} rows`,\n 'green'\n )\n );\n }\n } catch (transformError: any) {\r\n console.error(\r\n color(`✗ Transform error: ${transformError.message}`, 'red')\r\n );\r\n if (options.debug) {\r\n console.error(transformError.stack);\r\n }\r\n process.exit(1);\r\n }\r\n }\r\n\r\n // Format JSON\r\n const jsonOutput = options.pretty\r\n ? JSON.stringify(transformedData, null, 2)\r\n : JSON.stringify(transformedData);\r\n\r\n // Write output\n if (useStdout) {\n process.stdout.write(jsonOutput);\n } else {\n await fs.promises.writeFile(outputFile, jsonOutput, 'utf8');\n }\n\n const elapsed = Date.now() - startTime;\n if (shouldLog) {\n console.log(\n color(\n `✓ Converted ${transformedData.length.toLocaleString()} rows in ${elapsed}ms`,\n 'green'\n )\n );\n if (!useStdout) {\n console.log(\n color(\n ` Output: ${outputFile} (${jsonOutput.length.toLocaleString()} bytes)`,\n 'dim'\n )\n );\n }\n }\n\r\n return {\r\n rows: transformedData.length,\r\n bytes: jsonOutput.length,\r\n time: elapsed\r\n };\r\n } catch (error: any) {\r\n console.error(color(`✗ Error: ${error.message}`, 'red'));\r\n if (options.debug) {\r\n console.error(error.stack);\r\n }\r\n process.exit(1);\r\n }\r\n}\r\n\r\nasync function saveAsCsv(inputFile, outputFile, options: any): Promise<ConversionResult> {\n const startTime = Date.now();\r\n\r\n try {\r\n // Read input file\r\n const inputData = await fs.promises.readFile(inputFile, 'utf8');\r\n\r\n if (!options.silent) {\r\n console.log(color('Saving CSV file...', 'dim'));\r\n }\r\n\r\n // Apply transform if specified\r\n let transformedData = inputData;\r\n if (options.transform) {\r\n if (!options.silent) {\r\n console.log(\r\n color(`Applying transform from: ${options.transform}`, 'dim')\r\n );\r\n }\r\n try {\r\n // Для CSV нужно сначала распарсить, применить трансформацию, затем снова сериализовать\r\n const parsedData = jtcsv.csvToJson(inputData, {\n delimiter: options.delimiter,\n autoDetect: options.autoDetect,\n hasHeaders: options.hasHeaders,\n trim: options.trim,\n parseNumbers: options.parseNumbers,\n parseBooleans: options.parseBooleans,\n repairRowShifts: options.repairRowShifts,\n normalizeQuotes: options.normalizeQuotes\n });\n\r\n const transformedJson = transformLoader.applyTransform(\r\n parsedData,\r\n options.transform\r\n );\r\n\r\n // Конвертировать обратно в CSV\r\n transformedData = jtcsv.jsonToCsv(transformedJson, {\n delimiter: options.delimiter,\n includeHeaders: options.includeHeaders,\n normalizeQuotes: options.normalizeQuotes\n });\n\r\n if (!options.silent) {\r\n console.log(color('✓ Transform applied', 'green'));\r\n }\r\n } catch (transformError: any) {\r\n console.error(\r\n color(`✗ Transform error: ${transformError.message}`, 'red')\r\n );\r\n if (options.debug) {\r\n console.error(transformError.stack);\r\n }\r\n process.exit(1);\r\n }\r\n }\r\n\r\n // Write output file\r\n await fs.promises.writeFile(outputFile, transformedData, 'utf8');\r\n\r\n const elapsed = Date.now() - startTime;\r\n if (!options.silent) {\r\n console.log(color(`✓ Saved CSV in ${elapsed}ms`, 'green'));\r\n console.log(color(` Output: ${outputFile}`, 'dim'));\r\n }\r\n\r\n return { time: elapsed };\r\n } catch (error: any) {\r\n console.error(color(`✗ Error: ${error.message}`, 'red'));\r\n if (options.debug) {\r\n console.error(error.stack);\r\n }\r\n process.exit(1);\r\n }\r\n}\r\n\r\nasync function saveAsJson(inputFile, outputFile, options: any): Promise<ConversionResult> {\n const startTime = Date.now();\r\n\r\n try {\r\n // Read input file\r\n const inputData = await fs.promises.readFile(inputFile, 'utf8');\r\n const jsonData = JSON.parse(inputData);\r\n\r\n if (!options.silent) {\r\n console.log(\r\n color(\r\n `Saving ${Array.isArray(jsonData) ? jsonData.length.toLocaleString() + ' records' : 'object'}...`,\r\n 'dim'\r\n )\r\n );\r\n }\r\n\r\n // Apply transform if specified\r\n let transformedData = jsonData;\r\n if (options.transform) {\r\n if (!options.silent) {\r\n console.log(\r\n color(`Applying transform from: ${options.transform}`, 'dim')\r\n );\r\n }\r\n try {\r\n transformedData = transformLoader.applyTransform(\r\n jsonData,\r\n options.transform\r\n );\r\n if (!options.silent) {\r\n console.log(color('✓ Transform applied', 'green'));\r\n }\r\n } catch (transformError: any) {\r\n console.error(\r\n color(`✗ Transform error: ${transformError.message}`, 'red')\r\n );\r\n if (options.debug) {\r\n console.error(transformError.stack);\r\n }\r\n process.exit(1);\r\n }\r\n }\r\n\r\n // Prepare options for jtcsv\r\n const jtcsvOptions = {\r\n prettyPrint: options.pretty\r\n };\r\n\r\n // Save as JSON\r\n await jtcsv.saveAsJson(transformedData, outputFile, jtcsvOptions);\r\n\r\n const elapsed = Date.now() - startTime;\r\n if (!options.silent) {\r\n console.log(color(`✓ Saved JSON in ${elapsed}ms`, 'green'));\r\n console.log(color(` Output: ${outputFile}`, 'dim'));\r\n }\r\n\r\n return { time: elapsed };\r\n } catch (error: any) {\r\n console.error(color(`✗ Error: ${error.message}`, 'red'));\r\n if (options.debug) {\r\n console.error(error.stack);\r\n }\r\n process.exit(1);\r\n }\r\n}\r\n\r\n// ============================================================================\r\n// NDJSON CONVERSION FUNCTIONS\r\n// ============================================================================\r\n\r\nasync function convertNdjsonToCsv(inputFile, outputFile, options: any): Promise<ConversionResult> {\n const startTime = Date.now();\r\n\r\n try {\r\n if (!options.silent) {\r\n console.log(color('Converting NDJSON to CSV...', 'dim'));\r\n }\r\n\r\n // Read NDJSON file\r\n const inputData = await fs.promises.readFile(inputFile, 'utf8');\r\n const jsonData = jtcsv.ndjsonToJson(inputData);\r\n\r\n if (!options.silent) {\r\n console.log(\r\n color(`Parsed ${jsonData.length.toLocaleString()} records from NDJSON`, 'dim')\r\n );\r\n }\r\n\r\n // Prepare options for jtcsv\r\n const jtcsvOptions = {\n delimiter: options.delimiter,\n includeHeaders: options.includeHeaders,\n renameMap: options.renameMap,\n template: options.template,\n preventCsvInjection: options.preventCsvInjection,\n rfc4180Compliant: options.rfc4180Compliant,\n normalizeQuotes: options.normalizeQuotes\n };\n\r\n // Convert to CSV\r\n const csvData = jtcsv.jsonToCsv(jsonData, jtcsvOptions);\r\n\r\n // Write output file\r\n await fs.promises.writeFile(outputFile, csvData, 'utf8');\r\n\r\n const elapsed = Date.now() - startTime;\r\n if (!options.silent) {\r\n console.log(\r\n color(\r\n `✓ Converted ${jsonData.length.toLocaleString()} records in ${elapsed}ms`,\r\n 'green'\r\n )\r\n );\r\n console.log(\r\n color(\r\n ` Output: ${outputFile} (${csvData.length.toLocaleString()} bytes)`,\r\n 'dim'\r\n )\r\n );\r\n }\r\n\r\n return {\r\n records: jsonData.length,\r\n bytes: csvData.length,\r\n time: elapsed\r\n };\r\n } catch (error: any) {\r\n console.error(color(`✗ Error: ${error.message}`, 'red'));\r\n if (options.debug) {\r\n console.error(error.stack);\r\n }\r\n process.exit(1);\r\n }\r\n}\r\n\r\nasync function convertCsvToNdjson(inputFile, outputFile, options: any): Promise<ConversionResult> {\n const startTime = Date.now();\r\n\r\n try {\r\n if (!options.silent) {\r\n console.log(color('Converting CSV to NDJSON...', 'dim'));\r\n }\r\n\r\n // Prepare options for jtcsv\r\n const jtcsvOptions = {\r\n delimiter: options.delimiter,\r\n autoDetect: options.autoDetect,\r\n candidates: options.candidates,\r\n hasHeaders: options.hasHeaders,\r\n renameMap: options.renameMap,\r\n trim: options.trim,\r\n parseNumbers: options.parseNumbers,\r\n parseBooleans: options.parseBooleans\r\n };\r\n\r\n // Read and convert CSV\r\n const jsonData = await jtcsv.readCsvAsJson(inputFile, jtcsvOptions);\r\n\r\n // Convert to NDJSON\r\n const ndjsonData = jtcsv.jsonToNdjson(jsonData);\r\n\r\n // Write output file\r\n await fs.promises.writeFile(outputFile, ndjsonData, 'utf8');\r\n\r\n const elapsed = Date.now() - startTime;\r\n if (!options.silent) {\r\n console.log(\r\n color(\r\n `✓ Converted ${jsonData.length.toLocaleString()} rows in ${elapsed}ms`,\r\n 'green'\r\n )\r\n );\r\n console.log(\r\n color(\r\n ` Output: ${outputFile} (${ndjsonData.length.toLocaleString()} bytes)`,\r\n 'dim'\r\n )\r\n );\r\n }\r\n\r\n return {\r\n rows: jsonData.length,\r\n bytes: ndjsonData.length,\r\n time: elapsed\r\n };\r\n } catch (error: any) {\r\n console.error(color(`✗ Error: ${error.message}`, 'red'));\r\n if (options.debug) {\r\n console.error(error.stack);\r\n }\r\n process.exit(1);\r\n }\r\n}\r\n\r\nasync function convertNdjsonToJson(inputFile, outputFile, options: any): Promise<ConversionResult> {\n const startTime = Date.now();\r\n\r\n try {\r\n if (!options.silent) {\r\n console.log(color('Converting NDJSON to JSON array...', 'dim'));\r\n }\r\n\r\n // Read NDJSON file\r\n const inputData = await fs.promises.readFile(inputFile, 'utf8');\r\n const jsonData = jtcsv.ndjsonToJson(inputData);\r\n\r\n // Format JSON\r\n const jsonOutput = options.pretty\r\n ? JSON.stringify(jsonData, null, 2)\r\n : JSON.stringify(jsonData);\r\n\r\n // Write output file\r\n await fs.promises.writeFile(outputFile, jsonOutput, 'utf8');\r\n\r\n const elapsed = Date.now() - startTime;\r\n if (!options.silent) {\r\n console.log(\r\n color(\r\n `✓ Converted ${jsonData.length.toLocaleString()} records in ${elapsed}ms`,\r\n 'green'\r\n )\r\n );\r\n console.log(\r\n color(\r\n ` Output: ${outputFile} (${jsonOutput.length.toLocaleString()} bytes)`,\r\n 'dim'\r\n )\r\n );\r\n }\r\n\r\n return {\r\n records: jsonData.length,\r\n bytes: jsonOutput.length,\r\n time: elapsed\r\n };\r\n } catch (error: any) {\r\n console.error(color(`✗ Error: ${error.message}`, 'red'));\r\n if (options.debug) {\r\n console.error(error.stack);\r\n }\r\n process.exit(1);\r\n }\r\n}\r\n\r\nasync function convertJsonToNdjson(inputFile, outputFile, options: any): Promise<ConversionResult> {\n const startTime = Date.now();\r\n\r\n try {\r\n if (!options.silent) {\r\n console.log(color('Converting JSON array to NDJSON...', 'dim'));\r\n }\r\n\r\n // Read JSON file\r\n const inputData = await fs.promises.readFile(inputFile, 'utf8');\r\n const jsonData = JSON.parse(inputData);\r\n\r\n if (!Array.isArray(jsonData)) {\r\n throw new Error('JSON data must be an array of objects');\r\n }\r\n\r\n // Convert to NDJSON\r\n const ndjsonData = jtcsv.jsonToNdjson(jsonData);\r\n\r\n // Write output file\r\n await fs.promises.writeFile(outputFile, ndjsonData, 'utf8');\r\n\r\n const elapsed = Date.now() - startTime;\r\n if (!options.silent) {\r\n console.log(\r\n color(\r\n `✓ Converted ${jsonData.length.toLocaleString()} records in ${elapsed}ms`,\r\n 'green'\r\n )\r\n );\r\n console.log(\r\n color(\r\n ` Output: ${outputFile} (${ndjsonData.length.toLocaleString()} bytes)`,\r\n 'dim'\r\n )\r\n );\r\n }\r\n\r\n return {\r\n records: jsonData.length,\r\n bytes: ndjsonData.length,\r\n time: elapsed\r\n };\r\n } catch (error: any) {\r\n console.error(color(`✗ Error: ${error.message}`, 'red'));\r\n if (options.debug) {\r\n console.error(error.stack);\r\n }\r\n process.exit(1);\r\n }\r\n}\r\n\r\n// ============================================================================\r\n// UNWRAP/FLATTEN FUNCTION\r\n// ============================================================================\r\n\r\nasync function unwrapJson(inputFile, outputFile, options: any): Promise<ConversionResult> {\n const startTime = Date.now();\r\n\r\n try {\r\n if (!options.silent) {\r\n console.log(color('Unwrapping/flattening nested JSON...', 'dim'));\r\n }\r\n\r\n // Read JSON file\r\n const inputData = await fs.promises.readFile(inputFile, 'utf8');\r\n const jsonData = JSON.parse(inputData);\r\n\r\n const maxDepth = options.maxDepth || 10;\r\n const separator = options.flattenPrefix || '_';\r\n\r\n // Flatten function\r\n const flattenObject = (obj: any, prefix = '', depth = 0): any => {\r\n if (depth >= maxDepth) {\r\n return { [prefix.slice(0, -1)]: JSON.stringify(obj) };\r\n }\r\n\r\n const result = {};\r\n\r\n for (const [key, value] of Object.entries(obj)) {\r\n const newKey = prefix + key;\r\n\r\n if (value && typeof value === 'object' && !Array.isArray(value)) {\r\n Object.assign(result, flattenObject(value, newKey + separator, depth + 1));\r\n } else if (Array.isArray(value)) {\r\n // Flatten arrays\r\n if (options.unwrapArrays) {\r\n (result as any)[newKey] = value.join(', ');\r\n } else {\r\n (result as any)[newKey] = JSON.stringify(value);\r\n }\r\n } else {\r\n (result as any)[newKey] = value;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n let unwrappedData;\r\n if (Array.isArray(jsonData)) {\r\n unwrappedData = jsonData.map(item => flattenObject(item));\r\n if (!options.silent) {\r\n console.log(\r\n color(`Processing ${jsonData.length.toLocaleString()} records...`, 'dim')\r\n );\r\n }\r\n } else {\r\n unwrappedData = flattenObject(jsonData);\r\n }\r\n\r\n // Format JSON\r\n const jsonOutput = options.pretty\r\n ? JSON.stringify(unwrappedData, null, 2)\r\n : JSON.stringify(unwrappedData);\r\n\r\n // Write output file\r\n await fs.promises.writeFile(outputFile, jsonOutput, 'utf8');\r\n\r\n const elapsed = Date.now() - startTime;\r\n const recordCount = Array.isArray(unwrappedData) ? unwrappedData.length : 1;\r\n \r\n if (!options.silent) {\r\n console.log(\r\n color(\r\n `✓ Unwrapped ${recordCount.toLocaleString()} record(s) in ${elapsed}ms`,\r\n 'green'\r\n )\r\n );\r\n console.log(\r\n color(\r\n ` Output: ${outputFile} (${jsonOutput.length.toLocaleString()} bytes)`,\r\n 'dim'\r\n )\r\n );\r\n }\r\n\r\n return {\r\n records: recordCount,\r\n bytes: jsonOutput.length,\r\n time: elapsed\r\n };\r\n } catch (error: any) {\r\n console.error(color(`✗ Error: ${error.message}`, 'red'));\r\n if (options.debug) {\r\n console.error(error.stack);\r\n }\r\n process.exit(1);\r\n }\r\n}\r\n\r\nasync function preprocessJson(inputFile, outputFile, options: any): Promise<ConversionResult> {\n const startTime = Date.now();\r\n\r\n try {\r\n // Read input file\r\n const inputData = await fs.promises.readFile(inputFile, 'utf8');\r\n const jsonData = JSON.parse(inputData);\r\n\r\n if (!Array.isArray(jsonData)) {\r\n throw new Error(\r\n 'JSON data must be an array of objects for preprocessing'\r\n );\r\n }\r\n\r\n if (!options.silent) {\r\n console.log(\r\n color(\r\n `Preprocessing ${jsonData.length.toLocaleString()} records...`,\r\n 'dim'\r\n )\r\n );\r\n }\r\n\r\n // Preprocess data\r\n const processedData = jtcsv.preprocessData(jsonData);\r\n\r\n // Apply transform if specified\r\n let transformedData = processedData;\r\n if (options.transform) {\r\n if (!options.silent) {\r\n console.log(\r\n color(`Applying transform from: ${options.transform}`, 'dim')\r\n );\r\n }\r\n try {\r\n transformedData = transformLoader.applyTransform(\r\n processedData,\r\n options.transform\r\n );\r\n if (!options.silent) {\r\n console.log(\r\n color(\r\n `✓ Transform applied to ${transformedData.length} records`,\r\n 'green'\r\n )\r\n );\r\n }\r\n } catch (transformError: any) {\r\n console.error(\r\n color(`✗ Transform error: ${transformError.message}`, 'red')\r\n );\r\n if (options.debug) {\r\n console.error(transformError.stack);\r\n }\r\n process.exit(1);\r\n }\r\n }\r\n\r\n // Apply deep unwrap if needed\r\n if (options.unwrapArrays || options.stringifyObjects) {\r\n const maxDepth = options.maxDepth || 5;\r\n transformedData.forEach((item) => {\r\n for (const key in item) {\r\n if (item[key] && typeof item[key] === 'object') {\r\n item[key] = jtcsv.deepUnwrap(item[key]); // depth removed for compatibility\r\n }\r\n }\r\n });\r\n }\r\n\r\n // Format JSON\r\n const jsonOutput = options.pretty\r\n ? JSON.stringify(transformedData, null, 2)\r\n : JSON.stringify(transformedData);\r\n\r\n // Write output file\r\n await fs.promises.writeFile(outputFile, jsonOutput, 'utf8');\r\n\r\n const elapsed = Date.now() - startTime;\r\n if (!options.silent) {\r\n console.log(\r\n color(\r\n `✓ Preprocessed ${transformedData.length.toLocaleString()} records in ${elapsed}ms`,\r\n 'green'\r\n )\r\n );\r\n console.log(\r\n color(\r\n ` Output: ${outputFile} (${jsonOutput.length.toLocaleString()} bytes)`,\r\n 'dim'\r\n )\r\n );\r\n }\r\n\r\n return {\r\n records: transformedData.length,\r\n bytes: jsonOutput.length,\r\n time: elapsed\r\n };\r\n } catch (error: any) {\r\n console.error(color(`✗ Error: ${error.message}`, 'red'));\r\n if (options.debug) {\r\n console.error(error.stack);\r\n }\r\n process.exit(1);\r\n }\r\n}\r\n\r\n// ============================================================================\r\n// STREAMING FUNCTIONS\r\n// ============================================================================\r\n\r\nasync function streamJsonToCsv(inputFile, outputFile, options: any): Promise<void> {\r\n const startTime = Date.now();\r\n let recordCount = 0;\r\n\r\n try {\r\n if (!options.silent) {\r\n console.log(color('Streaming JSON to CSV...', 'dim'));\r\n }\r\n\r\n // Create streams\r\n const readStream = fs.createReadStream(inputFile, 'utf8');\r\n const writeStream = fs.createWriteStream(outputFile, 'utf8');\r\n\r\n // Add UTF-8 BOM if requested\r\n if (options.addBOM) {\r\n writeStream.write('\\uFEFF');\r\n }\r\n\r\n // Parse JSON stream\r\n let buffer = '';\r\n const isFirstChunk = true;\r\n let headersWritten = false;\r\n\r\n readStream.on('data', (chunk) => {\r\n buffer += chunk;\r\n\r\n // Try to parse complete JSON objects\r\n const lines = buffer.split('\\n');\r\n buffer = lines.pop() || '';\r\n\r\n for (const line of lines) {\r\n if (line.trim()) {\r\n try {\r\n const obj = JSON.parse(line);\r\n // Apply renameMap if provided\r\n let finalObj = obj;\r\n if (options.renameMap) {\n const renameMap = options.renameMap as Record<string, string>;\n finalObj = {};\n for (const [oldKey, newKey] of Object.entries(renameMap)) {\n if (oldKey in obj) {\n (finalObj as any)[newKey] = (obj as any)[oldKey];\n }\n }\n // Copy remaining fields\n for (const [key, value] of Object.entries(obj)) {\n if (!(key in renameMap)) {\n (finalObj as any)[key] = value;\n }\n }\n }\n recordCount++;\r\n\r\n // Write headers on first object\r\n if (!headersWritten && options.includeHeaders !== false) {\r\n const headers = Object.keys(finalObj);\r\n writeStream.write(headers.join(options.delimiter || ';') + '\\n');\r\n headersWritten = true;\r\n }\r\n\r\n // Write CSV row\r\n const row =\r\n Object.values(finalObj)\r\n .map((value) => {\r\n const str = String(value);\r\n if (\r\n str.includes(options.delimiter || ';') ||\r\n str.includes('\"') ||\r\n str.includes('\\n')\r\n ) {\r\n return `\"${str.replace(/\"/g, '\"\"')}\"`;\r\n }\r\n return str;\r\n })\r\n .join(options.delimiter || ';') + '\\n';\r\n\r\n writeStream.write(row);\r\n\r\n // Show progress\r\n if (options.verbose && recordCount % 10000 === 0) {\r\n process.stdout.write(\r\n color(\r\n ` Processed ${recordCount.toLocaleString()} records\\r`,\r\n 'dim'\r\n )\r\n );\r\n }\r\n } catch (error: any) {\r\n // Skip invalid JSON lines\r\n if (options.debug) {\r\n console.warn(\r\n color(\r\n ` Warning: Skipping invalid JSON line: ${error.message}`,\r\n 'yellow'\r\n )\r\n );\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n readStream.on('end', async () => {\r\n // Process remaining buffer\r\n if (buffer.trim()) {\r\n try {\r\n const obj = JSON.parse(buffer);\r\n\r\n // Apply renameMap if provided\r\n let finalObj = obj;\r\n if (options.renameMap) {\n const renameMap = options.renameMap as Record<string, string>;\n finalObj = {};\n for (const [oldKey, newKey] of Object.entries(renameMap)) {\n if (oldKey in obj) {\n (finalObj as any)[newKey] = (obj as any)[oldKey];\n }\n }\n // Copy remaining fields\n for (const [key, value] of Object.entries(obj)) {\n if (!(key in renameMap)) {\n (finalObj as any)[key] = value;\n }\n }\n }\n\r\n recordCount++;\r\n\r\n if (!headersWritten && options.includeHeaders !== false) {\r\n const headers = Object.keys(finalObj);\r\n writeStream.write(headers.join(options.delimiter || ';') + '\\n');\r\n }\r\n\r\n const row =\r\n Object.values(finalObj)\r\n .map((value) => {\r\n const str = String(value);\r\n if (\r\n str.includes(options.delimiter || ';') ||\r\n str.includes('\"') ||\r\n str.includes('\\n')\r\n ) {\r\n return `\"${str.replace(/\"/g, '\"\"')}\"`;\r\n }\r\n return str;\r\n })\r\n .join(options.delimiter || ';') + '\\n';\r\n\r\n writeStream.write(row);\r\n } catch (error: any) {\r\n // Skip invalid JSON\r\n }\r\n }\r\n\r\n writeStream.end();\r\n\r\n // Wait for write stream to finish\r\n await new Promise<void>((resolve) =>\n writeStream.on('finish', () => resolve())\n );\n\r\n const elapsed = Date.now() - startTime;\r\n if (!options.silent) {\r\n console.log(\r\n color(\r\n `\\n✓ Streamed ${recordCount.toLocaleString()} records in ${elapsed}ms`,\r\n 'green'\r\n )\r\n );\r\n console.log(color(` Output: ${outputFile}`, 'dim'));\r\n }\r\n });\r\n\r\n readStream.on('error', (error) => {\r\n console.error(color(`✗ Stream error: ${error.message}`, 'red'));\r\n process.exit(1);\r\n });\r\n\r\n writeStream.on('error', (error) => {\r\n console.error(color(`✗ Write error: ${error.message}`, 'red'));\r\n process.exit(1);\r\n });\r\n } catch (error: any) {\r\n console.error(color(`✗ Error: ${error.message}`, 'red'));\r\n if (options.debug) {\r\n console.error(error.stack);\r\n }\r\n process.exit(1);\r\n }\r\n}\r\n\r\nasync function streamCsvToJson(inputFile, outputFile, options: any): Promise<void> {\r\n const startTime = Date.now();\r\n let rowCount = 0;\r\n\r\n try {\r\n if (!options.silent) {\r\n console.log(color('Streaming CSV to JSON...', 'dim'));\r\n }\r\n\r\n // Create streams\r\n const readStream = fs.createReadStream(inputFile, 'utf8');\r\n const writeStream = fs.createWriteStream(outputFile, 'utf8');\r\n\r\n // Write JSON array opening bracket\r\n writeStream.write('[\\n');\r\n\r\n let buffer = '';\r\n let isFirstRow = true;\r\n let headers = [];\r\n\r\n readStream.on('data', (chunk) => {\r\n buffer += chunk;\r\n\r\n // Process complete lines\r\n const lines = buffer.split('\\n');\r\n buffer = lines.pop() || '';\r\n\r\n for (let i = 0; i < lines.length; i++) {\r\n const line = lines[i].trim();\r\n if (!line) {\r\n continue;\r\n }\r\n\r\n rowCount++;\r\n\r\n // Parse CSV line\r\n const fields = parseCsvLineSimple(line, options.delimiter || ';');\r\n\r\n // First row might be headers\r\n if (rowCount === 1 && options.hasHeaders !== false) {\r\n headers = fields;\r\n continue;\r\n }\r\n\r\n // Create JSON object\r\n const obj = {};\r\n const fieldCount = Math.min(fields.length, headers.length);\r\n\r\n for (let j = 0; j < fieldCount; j++) {\r\n const header = headers[j] || `column${j + 1}`;\r\n // Apply renameMap if provided\r\n let finalHeader = header;\r\n if (options.renameMap && options.renameMap[header]) {\r\n finalHeader = options.renameMap[header];\r\n }\r\n\r\n let value = fields[j];\r\n\r\n // Parse numbers if enabled\r\n if (options.parseNumbers) {\r\n // Fast numeric detection\r\n const trimmed = value.trim();\r\n const firstChar = trimmed.charAt(0);\r\n if ((firstChar >= '0' && firstChar <= '9') || firstChar === '-' || firstChar === '.') {\r\n const num = parseFloat(trimmed);\r\n if (!isNaN(num) && isFinite(num)) {\r\n if (String(num) === trimmed || (trimmed.includes('.') && !isNaN(Number(trimmed)))) {\r\n value = num;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Parse booleans if enabled\r\n if (options.parseBooleans) {\r\n const lowerValue = value.toLowerCase();\r\n if (lowerValue === 'true') {\r\n value = true;\r\n }\r\n if (lowerValue === 'false') {\r\n value = false;\r\n }\r\n }\r\n\r\n obj[finalHeader] = value;\r\n }\r\n\r\n // Write JSON object\r\n const jsonStr = JSON.stringify(obj);\r\n if (!isFirstRow) {\r\n writeStream.write(',\\n');\r\n }\r\n writeStream.write(' ' + jsonStr);\r\n isFirstRow = false;\r\n\r\n // Show progress\r\n if (options.verbose && rowCount % 10000 === 0) {\r\n process.stdout.write(\r\n color(` Processed ${rowCount.toLocaleString()} rows\\r`, 'dim')\r\n );\r\n }\r\n }\r\n });\r\n\r\n readStream.on('end', async () => {\r\n // Process remaining buffer\r\n if (buffer.trim()) {\r\n const fields = parseCsvLineSimple(\r\n buffer.trim(),\r\n options.delimiter || ';'\r\n );\r\n\r\n if (fields.length > 0) {\r\n rowCount++;\r\n\r\n // Skip if it's headers\r\n if (!(rowCount === 1 && options.hasHeaders !== false)) {\r\n const obj = {};\r\n const fieldCount = Math.min(fields.length, headers.length);\r\n\r\n for (let j = 0; j < fieldCount; j++) {\r\n const header = headers[j] || `column${j + 1}`;\r\n // Apply renameMap if provided\r\n let finalHeader = header;\r\n if (options.renameMap && options.renameMap[header]) {\r\n finalHeader = options.renameMap[header];\r\n }\r\n obj[finalHeader] = fields[j];\r\n }\r\n\r\n const jsonStr = JSON.stringify(obj);\r\n if (!isFirstRow) {\r\n writeStream.write(',\\n');\r\n }\r\n writeStream.write(' ' + jsonStr);\r\n }\r\n }\r\n }\r\n\r\n // Write JSON array closing bracket\r\n writeStream.write('\\n]');\r\n writeStream.end();\r\n\r\n // Wait for write stream to finish\r\n await new Promise<void>((resolve) =>\n writeStream.on('finish', () => resolve())\n );\n\r\n const elapsed = Date.now() - startTime;\r\n if (!options.silent) {\r\n console.log(\r\n color(\r\n `\\n✓ Streamed ${(rowCount - (options.hasHeaders !== false ? 1 : 0)).toLocaleString()} rows in ${elapsed}ms`,\r\n 'green'\r\n )\r\n );\r\n console.log(color(` Output: ${outputFile}`, 'dim'));\r\n }\r\n });\r\n\r\n readStream.on('error', (error) => {\r\n console.error(color(`✗ Stream error: ${error.message}`, 'red'));\r\n process.exit(1);\r\n });\r\n\r\n writeStream.on('error', (error) => {\r\n console.error(color(`✗ Write error: ${error.message}`, 'red'));\r\n process.exit(1);\r\n });\r\n } catch (error: any) {\r\n console.error(color(`✗ Error: ${error.message}`, 'red'));\r\n if (options.debug) {\r\n console.error(error.stack);\r\n }\r\n process.exit(1);\r\n }\r\n}\r\n\r\n// Simple CSV line parser for streaming\r\nfunction parseCsvLineSimple(line, delimiter: any): any {\r\n const fields = [];\r\n let currentField = '';\r\n let inQuotes = false;\r\n\r\n for (let i = 0; i < line.length; i++) {\r\n const char = line[i];\r\n\r\n if (char === '\"') {\r\n if (inQuotes && i + 1 < line.length && line[i + 1] === '\"') {\r\n // Escaped quote\r\n currentField += '\"';\r\n i++;\r\n } else {\r\n // Toggle quotes\r\n inQuotes = !inQuotes;\r\n }\r\n } else if (char === delimiter && !inQuotes) {\r\n fields.push(currentField);\r\n currentField = '';\r\n } else {\r\n currentField += char;\r\n }\r\n }\r\n\r\n fields.push(currentField);\r\n return fields;\r\n}\r\n\r\n// ============================================================================\r\n// BATCH PROCESSING FUNCTIONS\r\n// ============================================================================\r\n\r\nasync function batchJsonToCsv(inputPattern, outputDir, options: any): Promise<BatchSummary> {\n const startTime = Date.now();\r\n\r\n try {\r\n let glob;\r\n try {\r\n glob = require('glob');\r\n } catch (error: any) {\r\n console.error(\r\n color(\r\n '✗ Error: The \"glob\" module is required for batch processing',\r\n 'red'\r\n )\r\n );\r\n console.error(color(' Install it with: npm install glob', 'cyan'));\r\n console.error(color(' Or update jtcsv: npm update jtcsv', 'cyan'));\r\n process.exit(1);\r\n }\r\n const files = glob.sync(inputPattern, {\r\n absolute: true,\r\n nodir: true\r\n });\r\n\r\n if (files.length === 0) {\r\n console.error(\r\n color(`✗ No files found matching pattern: ${inputPattern}`, 'red')\r\n );\r\n process.exit(1);\r\n }\r\n\r\n if (!options.silent) {\r\n console.log(color(`Found ${files.length} files to process...`, 'dim'));\r\n }\r\n\r\n // Create output directory if it doesn't exist\r\n await fs.promises.mkdir(outputDir, { recursive: true });\r\n\r\n const results: BatchFileResult[] = [];\n const parallelLimit = options.parallel || 4;\r\n\r\n // Process files in parallel batches\r\n for (let i = 0; i < files.length; i += parallelLimit) {\r\n const batch = files.slice(i, i + parallelLimit);\r\n const promises = batch.map(async (file) => {\r\n const fileName = path.basename(file, '.json');\r\n const outputFile = path.join(outputDir, `${fileName}.csv`);\r\n\r\n if (!options.silent && options.verbose) {\r\n console.log(color(` Processing: ${file}`, 'dim'));\r\n }\r\n\r\n try {\r\n const result = await convertJsonToCsv(file, outputFile, {\r\n ...options,\r\n silent: true // Suppress individual file output\r\n });\r\n\r\n if (!options.silent) {\r\n console.log(\r\n color(\r\n ` ✓ ${fileName}.json → ${fileName}.csv (${result.records} records)`,\r\n 'green'\r\n )\r\n );\r\n }\r\n\r\n return { file, success: true, ...result };\r\n } catch (error: any) {\r\n if (!options.silent) {\r\n console.log(color(` ✗ ${fileName}.json: ${error.message}`, 'red'));\r\n }\r\n return { file, success: false, error: error.message };\r\n }\r\n });\r\n\r\n const batchResults = await Promise.all(promises);\r\n results.push(...batchResults);\r\n\r\n if (!options.silent) {\r\n const processed = i + batch.length;\r\n const percent = Math.round((processed / files.length) * 100);\r\n console.log(\r\n color(\r\n ` Progress: ${processed}/${files.length} (${percent}%)`,\r\n 'dim'\r\n )\r\n );\r\n }\r\n }\r\n\r\n const elapsed = Date.now() - startTime;\r\n const successful = results.filter((r) => r.success).length;\r\n const totalRecords = results\r\n .filter((r) => r.success)\r\n .reduce((sum, r) => sum + (r.records || 0), 0);\r\n\r\n if (!options.silent) {\r\n console.log(\r\n color(`\\n✓ Batch processing completed in ${elapsed}ms`, 'green')\r\n );\r\n console.log(\r\n color(` Successful: ${successful}/${files.length} files`, 'dim')\r\n );\r\n console.log(\r\n color(` Total records: ${totalRecords.toLocaleString()}`, 'dim')\r\n );\r\n console.log(color(` Output directory: ${outputDir}`, 'dim'));\r\n }\r\n\r\n return {\r\n totalFiles: files.length,\r\n successful,\r\n totalRecords,\r\n time: elapsed,\r\n results\r\n };\r\n } catch (error: any) {\r\n console.error(color(`✗ Batch processing error: ${error.message}`, 'red'));\r\n if (options.debug) {\r\n console.error(error.stack);\r\n }\r\n process.exit(1);\r\n }\r\n}\r\n\r\nasync function batchCsvToJson(inputPattern, outputDir, options: any): Promise<BatchSummary> {\n const startTime = Date.now();\r\n\r\n try {\r\n let glob;\r\n try {\r\n glob = require('glob');\r\n } catch (error: any) {\r\n console.error(\r\n color(\r\n '✗ Error: The \"glob\" module is required for batch processing',\r\n 'red'\r\n )\r\n );\r\n console.error(color(' Install it with: npm install glob', 'cyan'));\r\n console.error(color(' Or update jtcsv: npm update jtcsv', 'cyan'));\r\n process.exit(1);\r\n }\r\n const files = glob.sync(inputPattern, {\r\n absolute: true,\r\n nodir: true\r\n });\r\n\r\n if (files.length === 0) {\r\n console.error(\r\n color(`✗ No files found matching pattern: ${inputPattern}`, 'red')\r\n );\r\n process.exit(1);\r\n }\r\n\r\n if (!options.silent) {\r\n console.log(color(`Found ${files.length} files to process...`, 'dim'));\r\n }\r\n\r\n // Create output directory if it doesn't exist\r\n await fs.promises.mkdir(outputDir, { recursive: true });\r\n\r\n const results: BatchFileResult[] = [];\n const parallelLimit = options.parallel || 4;\r\n\r\n // Process files in parallel batches\r\n for (let i = 0; i < files.length; i += parallelLimit) {\r\n const batch = files.slice(i, i + parallelLimit);\r\n const promises = batch.map(async (file) => {\r\n const fileName = path.basename(file, '.csv');\r\n const outputFile = path.join(outputDir, `${fileName}.json`);\r\n\r\n if (!options.silent && options.verbose) {\r\n console.log(color(` Processing: ${file}`, 'dim'));\r\n }\r\n\r\n try {\r\n const result = await convertCsvToJson(file, outputFile, {\r\n ...options,\r\n silent: true // Suppress individual file output\r\n });\r\n\r\n if (!options.silent) {\r\n console.log(\r\n color(\r\n ` ✓ ${fileName}.csv → ${fileName}.json (${result.rows} rows)`,\r\n 'green'\r\n )\r\n );\r\n }\r\n\r\n return { file, success: true, ...result };\r\n } catch (error: any) {\r\n if (!options.silent) {\r\n console.log(color(` ✗ ${fileName}.csv: ${error.message}`, 'red'));\r\n }\r\n return { file, success: false, error: error.message };\r\n }\r\n });\r\n\r\n const batchResults = await Promise.all(promises);\r\n results.push(...batchResults);\r\n\r\n if (!options.silent) {\r\n const processed = i + batch.length;\r\n const percent = Math.round((processed / files.length) * 100);\r\n console.log(\r\n color(\r\n ` Progress: ${processed}/${files.length} (${percent}%)`,\r\n 'dim'\r\n )\r\n );\r\n }\r\n }\r\n\r\n const elapsed = Date.now() - startTime;\r\n const successful = results.filter((r) => r.success).length;\r\n const totalRows = results\r\n .filter((r) => r.success)\r\n .reduce((sum, r) => sum + (r.rows || 0), 0);\r\n\r\n if (!options.silent) {\r\n console.log(\r\n color(`\\n✓ Batch processing completed in ${elapsed}ms`, 'green')\r\n );\r\n console.log(\r\n color(` Successful: ${successful}/${files.length} files`, 'dim')\r\n );\r\n console.log(color(` Total rows: ${totalRows.toLocaleString()}`, 'dim'));\r\n console.log(color(` Output directory: ${outputDir}`, 'dim'));\r\n }\r\n\r\n return {\r\n totalFiles: files.length,\r\n successful,\r\n totalRows,\r\n time: elapsed,\r\n results\r\n };\r\n } catch (error: any) {\r\n console.error(color(`✗ Batch processing error: ${error.message}`, 'red'));\r\n if (options.debug) {\r\n console.error(error.stack);\r\n }\r\n process.exit(1);\r\n }\r\n}\r\n\r\nasync function batchProcessMixed(inputPattern, outputDir, options: any): Promise<BatchSummary> {\n const startTime = Date.now();\r\n\r\n try {\r\n let glob;\r\n try {\r\n glob = require('glob');\r\n } catch (error: any) {\r\n console.error(\r\n color(\r\n '✗ Error: The \"glob\" module is required for batch processing',\r\n 'red'\r\n )\r\n );\r\n console.error(color(' Install it with: npm install glob', 'cyan'));\r\n console.error(color(' Or update jtcsv: npm update jtcsv', 'cyan'));\r\n process.exit(1);\r\n }\r\n\r\n // Находим все файлы\r\n const files = glob.sync(inputPattern, {\r\n absolute: true,\r\n nodir: true\r\n });\r\n\r\n if (files.length === 0) {\r\n console.error(\r\n color(`✗ No files found matching pattern: ${inputPattern}`, 'red')\r\n );\r\n process.exit(1);\r\n }\r\n\r\n if (!options.silent) {\r\n console.log(color(`Found ${files.length} files to process...`, 'dim'));\r\n }\r\n\r\n // Создаем выходную директорию\r\n await fs.promises.mkdir(outputDir, { recursive: true });\r\n\r\n const results: BatchFileResult[] = [];\n const parallelLimit = options.parallel || 4;\r\n\r\n // Группируем файлы по типу\r\n const jsonFiles = files.filter((file) =>\r\n file.toLowerCase().endsWith('.json')\r\n );\r\n const csvFiles = files.filter((file) =>\r\n file.toLowerCase().endsWith('.csv')\r\n );\r\n const otherFiles = files.filter(\r\n (file) =>\r\n !file.toLowerCase().endsWith('.json') &&\r\n !file.toLowerCase().endsWith('.csv')\r\n );\r\n\r\n if (otherFiles.length > 0 && !options.silent) {\r\n console.log(\r\n color(\r\n ` Warning: Skipping ${otherFiles.length} non-JSON/CSV files`,\r\n 'yellow'\r\n )\r\n );\r\n }\r\n\r\n // Обрабатываем JSON файлы\r\n for (let i = 0; i < jsonFiles.length; i += parallelLimit) {\r\n const batch = jsonFiles.slice(i, i + parallelLimit);\r\n const promises = batch.map(async (file) => {\r\n const fileName = path.basename(file, '.json');\r\n const outputFile = path.join(outputDir, `${fileName}.csv`);\r\n\r\n if (!options.silent && options.verbose) {\r\n console.log(color(` Processing JSON: ${file}`, 'dim'));\r\n }\r\n\r\n try {\r\n const result = await convertJsonToCsv(file, outputFile, {\r\n ...options,\r\n silent: true\r\n });\r\n\r\n if (!options.silent) {\r\n console.log(\r\n color(\r\n ` ✓ ${fileName}.json → ${fileName}.csv (${result.records} records)`,\r\n 'green'\r\n )\r\n );\r\n }\r\n\r\n return { file, type: 'json', success: true, ...result };\r\n } catch (error: any) {\r\n if (!options.silent) {\r\n console.log(color(` ✗ ${fileName}.json: ${error.message}`, 'red'));\r\n }\r\n return { file, type: 'json', success: false, error: error.message };\r\n }\r\n });\r\n\r\n const batchResults = await Promise.all(promises);\r\n results.push(...batchResults);\r\n }\r\n\r\n // Обрабатываем CSV файлы\r\n for (let i = 0; i < csvFiles.length; i += parallelLimit) {\r\n const batch = csvFiles.slice(i, i + parallelLimit);\r\n const promises = batch.map(async (file) => {\r\n const fileName = path.basename(file, '.csv');\r\n const outputFile = path.join(outputDir, `${fileName}.json`);\r\n\r\n if (!options.silent && options.verbose) {\r\n console.log(color(` Processing CSV: ${file}`, 'dim'));\r\n }\r\n\r\n try {\r\n const result = await convertCsvToJson(file, outputFile, {\r\n ...options,\r\n silent: true\r\n });\r\n\r\n if (!options.silent) {\r\n console.log(\r\n color(\r\n ` ✓ ${fileName}.csv → ${fileName}.json (${result.rows} rows)`,\r\n 'green'\r\n )\r\n );\r\n }\r\n\r\n return { file, type: 'csv', success: true, ...result };\r\n } catch (error: any) {\r\n if (!options.silent) {\r\n console.log(color(` ✗ ${fileName}.csv: ${error.message}`, 'red'));\r\n }\r\n return { file, type: 'csv', success: false, error: error.message };\r\n }\r\n });\r\n\r\n const batchResults = await Promise.all(promises);\r\n results.push(...batchResults);\r\n }\r\n\r\n const elapsed = Date.now() - startTime;\r\n const successful = results.filter((r) => r.success).length;\r\n const totalRecords = results\r\n .filter((r) => r.success)\r\n .reduce((sum, r) => sum + (r.records || r.rows || 0), 0);\r\n\r\n if (!options.silent) {\r\n console.log(\r\n color(`\\n✓ Mixed batch processing completed in ${elapsed}ms`, 'green')\r\n );\r\n console.log(\r\n color(` Successful: ${successful}/${files.length} files`, 'dim')\r\n );\r\n console.log(\r\n color(\r\n ` JSON files: ${jsonFiles.length}, CSV files: ${csvFiles.length}`,\r\n 'dim'\r\n )\r\n );\r\n console.log(\r\n color(` Total records: ${totalRecords.toLocaleString()}`, 'dim')\r\n );\r\n console.log(color(` Output directory: ${outputDir}`, 'dim'));\r\n }\r\n\r\n return {\r\n totalFiles: files.length,\r\n jsonFiles: jsonFiles.length,\r\n csvFiles: csvFiles.length,\r\n otherFiles: otherFiles.length,\r\n successful,\r\n totalRecords,\r\n time: elapsed,\r\n results\r\n };\r\n } catch (error: any) {\r\n console.error(color(`✗ Batch processing error: ${error.message}`, 'red'));\r\n if (options.debug) {\r\n console.error(error.stack);\r\n }\r\n process.exit(1);\r\n }\r\n}\r\n\r\n// ============================================================================\r\n// OPTIONS PARSING\r\n// ============================================================================\r\n\r\nfunction parseOptions(args: any): any {\r\n const options = {\r\n delimiter: ';',\r\n autoDetect: true,\r\n candidates: [';', ',', '\\t', '|'],\r\n hasHeaders: true,\r\n includeHeaders: true,\r\n renameMap: undefined,\r\n template: undefined,\r\n trim: true,\r\n parseNumbers: false,\r\n parseBooleans: false,\n useFastPath: true,\n fastPathMode: 'objects',\n repairRowShifts: true,\n normalizeQuotes: true,\n preventCsvInjection: true,\n rfc4180Compliant: true,\r\n maxRecords: undefined,\r\n maxRows: undefined,\r\n maxDepth: 5,\r\n pretty: false,\r\n silent: false,\r\n verbose: false,\r\n debug: false,\r\n dryRun: false,\r\n addBOM: false,\r\n unwrapArrays: false,\r\n stringifyObjects: false,\r\n recursive: false,\n pattern: '**/*',\n outputDir: './output',\n patternProvided: false,\n outputDirProvided: false,\n overwrite: false,\n parallel: 4,\n chunkSize: 65536,\r\n bufferSize: 1000,\r\n schema: undefined,\r\n transform: undefined,\r\n flattenPrefix: '_',\r\n flatten: false,\r\n flattenSeparator: '.',\r\n flattenMaxDepth: 3,\n arrayHandling: 'stringify',\n port: 3000,\n host: 'localhost'\n };\n\r\n const files = [];\r\n\r\n for (let i = 0; i < args.length; i++) {\r\n const arg = args[i];\r\n\r\n if (arg.startsWith('--')) {\r\n const [key, value] = arg.slice(2).split('=');\r\n\r\n switch (key) {\r\n case 'delimiter':\r\n options.delimiter = value || ',';\r\n options.autoDetect = false;\r\n break;\r\n case 'auto-detect':\r\n options.autoDetect = value !== 'false';\r\n break;\r\n case 'candidates':\r\n options.candidates = value ? value.split(',') : [';', ',', '\\t', '|'];\r\n break;\r\n case 'no-headers':\r\n options.includeHeaders = false;\r\n options.hasHeaders = false;\r\n break;\r\n case 'parse-numbers':\r\n options.parseNumbers = true;\r\n break;\r\n case 'parse-booleans':\r\n options.parseBooleans = true;\r\n break;\r\n case 'no-trim':\r\n options.trim = false;\r\n break;\r\n case 'no-fast-path':\r\n options.useFastPath = false;\r\n break;\r\n case 'fast-path':\r\n options.useFastPath = value !== 'false';\r\n break;\r\n case 'fast-path-mode':\n options.fastPathMode = value || 'objects';\n if (\n options.fastPathMode !== 'objects' &&\n options.fastPathMode !== 'compact'\n ) {\n throw new Error('Invalid --fast-path-mode value (objects|compact)');\n }\n break;\n case 'repair-row-shifts':\n options.repairRowShifts = true;\n break;\n case 'normalize-quotes':\n options.normalizeQuotes = true;\n break;\n case 'rename':\n try {\r\n const jsonStr = value || '{}';\r\n const cleanStr = jsonStr\r\n .replace(/^'|'$/g, '')\r\n .replace(/^\"|\"$/g, '');\r\n options.renameMap = JSON.parse(cleanStr);\r\n } catch (e) {\r\n throw new Error(`Invalid JSON in --rename option: ${e.message}`);\r\n }\r\n break;\r\n case 'template':\r\n try {\r\n const jsonStr = value || '{}';\r\n const cleanStr = jsonStr\r\n .replace(/^'|'$/g, '')\r\n .replace(/^\"|\"$/g, '');\r\n options.template = JSON.parse(cleanStr);\r\n } catch (e) {\r\n throw new Error(`Invalid JSON in --template option: ${e.message}`);\r\n }\r\n break;\r\n case 'no-injection-protection':\r\n options.preventCsvInjection = false;\r\n break;\r\n case 'no-rfc4180':\r\n options.rfc4180Compliant = false;\r\n break;\r\n case 'max-records':\r\n options.maxRecords = parseInt(value, 10);\r\n break;\r\n case 'max-rows':\r\n options.maxRows = parseInt(value, 10);\r\n break;\r\n case 'max-depth':\r\n options.maxDepth = parseInt(value, 10) || 5;\r\n break;\r\n case 'pretty':\r\n options.pretty = true;\r\n break;\r\n case 'flatten':\r\n options.flatten = true;\r\n break;\r\n case 'flatten-separator':\r\n options.flattenSeparator = value || '.';\r\n break;\r\n case 'flatten-max-depth':\r\n options.flattenMaxDepth = parseInt(value, 10) || 3;\r\n break;\r\n case 'array-handling':\r\n options.arrayHandling = value || 'stringify';\r\n if (!['stringify', 'join', 'expand'].includes(options.arrayHandling)) {\r\n throw new Error('Invalid --array-handling value (stringify|join|expand)');\r\n }\r\n break;\r\n case 'silent':\r\n options.silent = true;\r\n break;\r\n case 'verbose':\r\n options.verbose = true;\r\n break;\r\n case 'debug':\r\n options.debug = true;\r\n break;\r\n case 'dry-run':\r\n options.dryRun = true;\r\n break;\r\n case 'add-bom':\r\n options.addBOM = true;\r\n break;\r\n case 'unwrap-arrays':\r\n options.unwrapArrays = true;\r\n break;\r\n case 'stringify-objects':\r\n options.stringifyObjects = true;\r\n break;\r\n case 'recursive':\r\n options.recursive = true;\r\n break;\r\n case 'pattern':\n options.pattern = value || '**/*';\n options.patternProvided = true;\n break;\n case 'output-dir':\n options.outputDir = value || './output';\n options.outputDirProvided = true;\n break;\n case 'overwrite':\r\n options.overwrite = true;\r\n break;\r\n case 'parallel':\r\n options.parallel = parseInt(value, 10) || 4;\r\n break;\r\n case 'chunk-size':\r\n options.chunkSize = parseInt(value, 10) || 65536;\r\n break;\r\n case 'buffer-size':\r\n options.bufferSize = parseInt(value, 10) || 1000;\r\n break;\r\n case 'schema':\r\n try {\r\n const jsonStr = value || '{}';\r\n const cleanStr = jsonStr\r\n .replace(/^'|'$/g, '')\r\n .replace(/^\"|\"$/g, '');\r\n options.schema = JSON.parse(cleanStr);\r\n } catch (e) {\r\n throw new Error(`Invalid JSON in --schema option: ${e.message}`);\r\n }\r\n break;\r\n case 'transform':\r\n options.transform = value;\r\n break;\r\n case 'port':\r\n options.port = parseInt(value, 10) || 3000;\r\n break;\r\n case 'host':\r\n options.host = value || 'localhost';\r\n break;\r\n }\r\n } else if (arg === '-' || !arg.startsWith('-')) {\n files.push(arg);\n }\n }\n\r\n return { options, files };\r\n}\r\n\r\n// ============================================================================\r\n// TUI LAUNCHER\r\n// ============================================================================\r\n\r\nasync function launchTUI(): Promise<void> {\r\n try {\r\n console.log(color('Launching Terminal User Interface...', 'cyan'));\r\n console.log(color('Press Ctrl+Q to exit', 'dim'));\r\n\r\n const JtcsvTUI = require('@jtcsv/tui');\r\n const tui = new JtcsvTUI();\r\n tui.start();\r\n } catch (error: any) {\r\n if (error.code === 'MODULE_NOT_FOUND') {\r\n console.error(color('Error: @jtcsv/tui is not installed', 'red'));\r\n console.log(color('Install it with:', 'dim'));\r\n console.log(color(' npm install @jtcsv/tui', 'cyan'));\r\n console.log(color('\\nOr use the CLI interface instead:', 'dim'));\r\n console.log(color(' jtcsv help', 'cyan'));\r\n } else {\r\n console.error(color(`Error: ${error.message}`, 'red'));\r\n }\r\n process.exit(1);\r\n }\r\n}\r\n\r\nasync function launchWebUI(options: any = {}): Promise<void> {\r\n try {\r\n const webServer = require('../src/web-server');\r\n webServer.startServer({\r\n port: options.port || 3000,\r\n host: options.host || 'localhost'\r\n });\r\n } catch (error: any) {\r\n console.error(color(`Error: ${error.message}`, 'red'));\r\n if (options.debug) {\r\n console.error(error.stack);\r\n }\r\n process.exit(1);\r\n }\r\n}\r\n\r\nasync function startBasicTUI(): Promise<void> {\r\n\r\n const rl = readline.createInterface({\r\n input: process.stdin,\r\n output: process.stdout\r\n });\r\n\r\n console.clear();\r\n console.log(color('╔══════════════════════════════════════╗', 'cyan'));\r\n console.log(color('║ JTCSV Terminal Interface ║', 'cyan'));\r\n console.log(color('╚══════════════════════════════════════╝', 'cyan'));\r\n console.log();\r\n console.log(color('Select operation:', 'bright'));\r\n console.log(' 1. JSON → CSV');\r\n console.log(' 2. CSV → JSON');\r\n console.log(' 3. Preprocess JSON');\r\n console.log(' 4. Batch Processing');\r\n console.log(' 5. Exit');\r\n console.log();\r\n\r\n rl.question(color('Enter choice (1-5): ', 'cyan'), async (choice) => {\r\n switch (choice) {\r\n case '1':\r\n await runJsonToCsvTUI(rl);\r\n break;\r\n case '2':\r\n await runCsvToJsonTUI(rl);\r\n break;\r\n case '3':\r\n console.log(color('Preprocess feature coming soon...', 'yellow'));\r\n rl.close();\r\n break;\r\n case '4':\r\n console.log(color('Batch processing coming soon...', 'yellow'));\r\n rl.close();\r\n break;\r\n case '5':\r\n console.log(color('Goodbye!', 'green'));\r\n rl.close();\r\n process.exit(0);\r\n break;\r\n default:\r\n console.log(color('Invalid choice', 'red'));\r\n rl.close();\r\n process.exit(1);\r\n }\r\n });\r\n}\r\n\r\nasync function runJsonToCsvTUI(rl: any): Promise<void> {\r\n console.clear();\r\n console.log(color('JSON → CSV Conversion', 'cyan'));\r\n console.log();\r\n\r\n rl.question('Input JSON file: ', (inputFile) => {\r\n rl.question('Output CSV file: ', async (outputFile) => {\r\n rl.question('Delimiter (default: ;): ', async (delimiter) => {\r\n try {\r\n console.log(color('\\nConverting...', 'dim'));\r\n\r\n const result = await convertJsonToCsv(inputFile, outputFile, {\r\n delimiter: delimiter || ';',\r\n silent: false\r\n });\r\n\r\n console.log(color('\\n✓ Conversion complete!', 'green'));\r\n rl.question('\\nPress Enter to continue...', () => {\r\n rl.close();\r\n startBasicTUI();\r\n });\r\n } catch (error: any) {\r\n console.error(color(`✗ Error: ${error.message}`, 'red'));\r\n rl.close();\r\n process.exit(1);\r\n }\r\n });\r\n });\r\n });\r\n}\r\n\r\nasync function runCsvToJsonTUI(rl: any): Promise<void> {\r\n console.clear();\r\n console.log(color('CSV → JSON Conversion', 'cyan'));\r\n console.log();\r\n\r\n rl.question('Input CSV file: ', (inputFile) => {\r\n rl.question('Output JSON file: ', async (outputFile) => {\r\n rl.question('Delimiter (default: ;): ', async (delimiter) => {\r\n rl.question('Pretty print? (y/n): ', async (pretty) => {\r\n try {\r\n console.log(color('\\nConverting...', 'dim'));\r\n\r\n const result = await convertCsvToJson(inputFile, outputFile, {\r\n delimiter: delimiter || ';',\r\n pretty: pretty.toLowerCase() === 'y',\r\n silent: false\r\n });\r\n\r\n console.log(color('\\n✓ Conversion complete!', 'green'));\r\n rl.question('\\nPress Enter to continue...', () => {\r\n rl.close();\r\n startBasicTUI();\r\n });\r\n } catch (error: any) {\r\n console.error(color(`✗ Error: ${error.message}`, 'red'));\r\n rl.close();\r\n process.exit(1);\r\n }\r\n });\r\n });\r\n });\r\n });\r\n}\r\n\r\n// ============================================================================\r\n// MAIN FUNCTION\r\n// ============================================================================\r\n\r\nasync function main(): Promise<void> {\r\n const args = process.argv.slice(2);\r\n\r\n if (args.length === 0) {\r\n showHelp();\r\n return;\r\n }\r\n\r\n const command = args[0].toLowerCase();\r\n const { options, files } = parseOptions(args.slice(1));\r\n\r\n // Handle dry run\r\n if (options.dryRun) {\r\n console.log(color('DRY RUN - No files will be modified', 'yellow'));\r\n console.log(`Command: ${command}`);\r\n console.log(`Files: ${files.join(', ')}`);\r\n console.log('Options:', options);\r\n return;\r\n }\r\n\r\n // Suppress output if silent mode\r\n if (options.silent) {\r\n console.log = () => {};\r\n console.info = () => {};\r\n }\r\n\r\n switch (command) {\r\n // Main conversion commands\r\n case 'json-to-csv':\r\n case 'json2csv':\r\n if (files.length < 2) {\r\n console.error(color('Error: Input and output files required', 'red'));\r\n console.log(\r\n color('Usage: jtcsv json-to-csv input.json output.csv', 'cyan')\r\n );\r\n process.exit(1);\r\n }\r\n await convertJsonToCsv(files[0], files[1], options);\r\n break;\r\n\r\n case 'csv-to-json':\r\n case 'csv2json':\r\n if (files.length < 2) {\r\n console.error(color('Error: Input and output files required', 'red'));\r\n console.log(\r\n color('Usage: jtcsv csv-to-json input.csv output.json', 'cyan')\r\n );\r\n process.exit(1);\r\n }\r\n await convertCsvToJson(files[0], files[1], options);\r\n break;\r\n\r\n case 'save-json':\r\n if (files.length < 2) {\r\n console.error(color('Error: Input and output files required', 'red'));\r\n console.log(\r\n color('Usage: jtcsv save-json input.json output.json', 'cyan')\r\n );\r\n process.exit(1);\r\n }\r\n await saveAsJson(files[0], files[1], options);\r\n break;\r\n\r\n case 'save-csv':\r\n if (files.length < 2) {\r\n console.error(color('Error: Input and output files required', 'red'));\r\n console.log(\r\n color('Usage: jtcsv save-csv input.csv output.csv', 'cyan')\r\n );\r\n process.exit(1);\r\n }\r\n await saveAsCsv(files[0], files[1], options);\r\n break;\r\n\r\n case 'preprocess':\r\n if (files.length < 2) {\r\n console.error(color('Error: Input and output files required', 'red'));\r\n console.log(\r\n color('Usage: jtcsv preprocess input.json output.json', 'cyan')\r\n );\r\n process.exit(1);\r\n }\r\n await preprocessJson(files[0], files[1], options);\r\n break;\r\n\r\n // NDJSON commands\r\n case 'ndjson-to-csv':\r\n if (files.length < 2) {\r\n console.error(color('Error: Input and output files required', 'red'));\r\n console.log(\r\n color('Usage: jtcsv ndjson-to-csv input.ndjson output.csv', 'cyan')\r\n );\r\n process.exit(1);\r\n }\r\n await convertNdjsonToCsv(files[0], files[1], options);\r\n break;\r\n\r\n case 'csv-to-ndjson':\r\n if (files.length < 2) {\r\n console.error(color('Error: Input and output files required', 'red'));\r\n console.log(\r\n color('Usage: jtcsv csv-to-ndjson input.csv output.ndjson', 'cyan')\r\n );\r\n process.exit(1);\r\n }\r\n await convertCsvToNdjson(files[0], files[1], options);\r\n break;\r\n\r\n case 'ndjson-to-json':\r\n if (files.length < 2) {\r\n console.error(color('Error: Input and output files required', 'red'));\r\n console.log(\r\n color('Usage: jtcsv ndjson-to-json input.ndjson output.json', 'cyan')\r\n );\r\n process.exit(1);\r\n }\r\n await convertNdjsonToJson(files[0], files[1], options);\r\n break;\r\n\r\n case 'json-to-ndjson':\r\n if (files.length < 2) {\r\n console.error(color('Error: Input and output files required', 'red'));\r\n console.log(\r\n color('Usage: jtcsv json-to-ndjson input.json output.ndjson', 'cyan')\r\n );\r\n process.exit(1);\r\n }\r\n await convertJsonToNdjson(files[0], files[1], options);\r\n break;\r\n\r\n // Unwrap/Flatten command\r\n case 'unwrap':\r\n case 'flatten':\r\n if (files.length < 2) {\r\n console.error(color('Error: Input and output files required', 'red'));\r\n console.log(\r\n color('Usage: jtcsv unwrap input.json output.json', 'cyan')\r\n );\r\n process.exit(1);\r\n }\r\n await unwrapJson(files[0], files[1], options);\r\n break;\r\n\r\n // Streaming commands\r\n case 'stream':\r\n if (args.length < 2) {\r\n console.error(\r\n color('Error: Streaming mode requires subcommand', 'red')\r\n );\r\n console.log(\r\n color(\r\n 'Usage: jtcsv stream [json-to-csv|csv-to-json|file-to-csv|file-to-json]',\r\n 'cyan'\r\n )\r\n );\r\n process.exit(1);\r\n }\r\n\r\n const streamCommand = args[1].toLowerCase();\r\n // Для stream команд нужно парсить опции начиная с 3-го аргумента (после stream и подкоманды)\r\n const streamArgs = args.slice(2);\r\n const { options: streamOptions, files: streamFiles } =\r\n parseOptions(streamArgs);\r\n\r\n if (streamCommand === 'json-to-csv' && streamFiles.length >= 2) {\r\n await streamJsonToCsv(streamFiles[0], streamFiles[1], streamOptions);\r\n } else if (streamCommand === 'csv-to-json' && streamFiles.length >= 2) {\r\n await streamCsvToJson(streamFiles[0], streamFiles[1], streamOptions);\r\n } else if (streamCommand === 'file-to-csv' && streamFiles.length >= 2) {\r\n // Use jtcsv streaming API if available\r\n try {\r\n const readStream = fs.createReadStream(streamFiles[0], 'utf8');\r\n const writeStream = fs.createWriteStream(streamFiles[1], 'utf8');\r\n\r\n if (streamOptions.addBOM) {\r\n writeStream.write('\\uFEFF');\r\n }\r\n\r\n const transformStream = jtcsv.createJsonToCsvStream(streamOptions);\r\n await pipeline(readStream, transformStream, writeStream);\r\n\r\n console.log(color('✓ File streamed successfully', 'green'));\r\n } catch (error: any) {\r\n console.error(color(`✗ Streaming error: ${error.message}`, 'red'));\r\n process.exit(1);\r\n }\r\n } else if (streamCommand === 'file-to-json' && streamFiles.length >= 2) {\r\n // Use jtcsv streaming API if available\r\n try {\r\n const readStream = fs.createReadStream(streamFiles[0], 'utf8');\r\n const writeStream = fs.createWriteStream(streamFiles[1], 'utf8');\r\n\r\n const transformStream = jtcsv.createCsvToJsonStream(streamOptions);\r\n await pipeline(readStream, transformStream, writeStream);\r\n\r\n console.log(color('✓ File streamed successfully', 'green'));\r\n } catch (error: any) {\r\n console.error(color(`✗ Streaming error: ${error.message}`, 'red'));\r\n process.exit(1);\r\n }\r\n } else {\r\n console.error(\r\n color('Error: Invalid streaming command or missing files', 'red')\r\n );\r\n process.exit(1);\r\n }\r\n break;\r\n\r\n // Batch processing commands\r\n case 'batch':\r\n if (args.length < 2) {\r\n console.error(color('Error: Batch mode requires subcommand', 'red'));\r\n console.log(\r\n color('Usage: jtcsv batch [json-to-csv|csv-to-json|process]', 'cyan')\r\n );\r\n process.exit(1);\r\n }\r\n\r\n const batchCommand = args[1].toLowerCase();\r\n // Для batch команд нужно парсить опции начиная с 3-го аргумента (после batch и подкоманды)\r\n const batchArgs = args.slice(2);\n const { options: batchOptions, files: batchFiles } =\n parseOptions(batchArgs);\n const inputPattern = batchFiles[0]\n || (batchOptions.patternProvided ? batchOptions.pattern : undefined);\n const outputDir = batchFiles[1]\n || (batchOptions.outputDirProvided ? batchOptions.outputDir : undefined);\n\n if (!inputPattern || !outputDir) {\n console.error(\n color('Error: Batch mode requires input pattern and output directory', 'red')\n );\n console.log(\n color('Usage: jtcsv batch [json-to-csv|csv-to-json|process] \"<pattern>\" \"<outputDir>\"', 'cyan')\n );\n console.log(\n color('Or: jtcsv batch <subcommand> --pattern=\"<pattern>\" --output-dir=\"<outputDir>\"', 'cyan')\n );\n process.exit(1);\n }\n\n if (batchCommand === 'json-to-csv') {\n await batchJsonToCsv(inputPattern, outputDir, batchOptions);\n } else if (batchCommand === 'csv-to-json') {\n await batchCsvToJson(inputPattern, outputDir, batchOptions);\n } else if (batchCommand === 'process') {\n await batchProcessMixed(inputPattern, outputDir, batchOptions);\n } else {\n console.error(\n color('Error: Invalid batch command or missing files', 'red')\n );\n process.exit(1);\r\n }\r\n break;\r\n\r\n // TUI command\r\n case 'tui':\r\n await launchTUI();\r\n break;\r\n\r\n // Web UI command\r\n case 'web':\r\n await launchWebUI(options);\r\n break;\r\n\r\n // Help and version\r\n case 'help':\r\n case '--help':\r\n case '-h':\r\n showHelp();\r\n break;\r\n\r\n case 'version':\r\n case '-v':\r\n case '--version':\r\n showVersion();\r\n break;\r\n\r\n default:\r\n console.error(color(`Error: Unknown command '${command}'`, 'red'));\r\n console.log(color('Use jtcsv help for available commands', 'cyan'));\r\n process.exit(1);\r\n }\r\n}\r\n\r\n// ============================================================================\r\n// ERROR HANDLING\r\n// ============================================================================\r\n\r\nprocess.on('uncaughtException', (error: any) => {\n console.error(color(`\\n✗ Uncaught error: ${error.message}`, 'red'));\r\n if (process.env.DEBUG) {\r\n console.error(error.stack);\r\n }\r\n process.exit(1);\r\n});\r\n\r\nprocess.on('unhandledRejection', (error: any) => {\n console.error(\r\n color(`\\n✗ Unhandled promise rejection: ${error.message}`, 'red')\r\n );\r\n if (process.env.DEBUG) {\r\n console.error(error.stack);\r\n }\r\n process.exit(1);\r\n});\r\n\r\n// Run main function\r\nif (require.main === module) {\r\n main().catch((error: any) => {\n console.error(color(`\\n✗ Fatal error: ${error.message}`, 'red'));\r\n process.exit(1);\r\n });\r\n}\r\n\r\nmodule.exports = { main };\r\n\r\n\r\n"]}
|